Безопасно ли использовать QTeilitaryFile с QProcess?

Я должен прочитать сценарий от пользователя и вызвать QProcess передавая этот сценарий как файл.

Например, пользователь вставляет, скажем, скрипт Python

import sys
print(sys.copyright)

и я должен поместить этот скрипт в файл и вызвать интерпретатор python, используя этот файл.

Я думал использовать QTemporaryFileпотому что этот файл будет служить только при запуске процесса, и мне не нужно держать его открытым.

Вопрос заключается в следующем: безопасно ли открывать QTeoraryFile, записывать в него что-либо, передавать этот файл процессу (который будет продолжаться бесконечно), а затем уничтожать временный файл? Что если процессу снова понадобится этот файл? Что если процесс оставит файл открытым?

Я считаю, что, если процесс остается открытым, никаких проблем не возникнет: возможно, QTeventFile отменит путь, но данные все равно будут доступны в памяти.

Но что, если процесс попытается снова открыть файл?

Вот фрагмент как пример (писал на лету)

QString script = QInputDialog::getText(blah);
QTemporaryFile tmp;
if (tmp.open()) {
tmp.write(script.toUtf8());
QStringList params;
params << tmp.fileName();
QProcess *proc = new QProcess("/usr/bin/python3");
proc->start(params);
}

3

Решение

Насколько я понимаю, в случае флага ‘autoRemove’ (который включен по умолчанию) QTeoraryFile будет существовать до тех пор, пока существует экземпляр QTevenFile. Поэтому в коде, который вы изначально представили, когда tmp выйдет из области видимости, файл будет удален. Вызов open / close для объекта не удалит файл.

Вы можете динамически выделить файл с помощью QTeoraryFile * pTmp = new QTevenFile, а затем удалить его позже, если вы знаете, когда скрипт Python закончил с ним.

3

Другие решения

Ой, я только что отметил autoRemove флаг в QTemporaryFile, Я думаю, что это может быть решением: если установить false, файл не будет удален с диска, поэтому процесс может свободно использовать файл — я думаю.

Временные файлы должны храниться в расположении системы по умолчанию, поэтому я предполагаю, что файлы не удаляются до перезагрузки (по крайней мере, я считаю, что Linux работает таким образом).

Это всего лишь идея, но я буду ждать других ответов или подтверждений.

1

По вопросам рекламы [email protected]