2013-04-24 6 views
3

Мне нужно прочитать скрипт от пользователя и вызвать QProcess, передав этот скрипт как файл .Можно ли использовать QTemporaryFile с QProcess?

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

import sys 
print(sys.copyright) 

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

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

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

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

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

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

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» (который включен по умолчанию) QTemporaryFile будет существовать до тех пор, пока существует экземпляр QTemporaryFile. Поэтому в коде, который вы изначально представили, когда tmp выходит за пределы области действия, файл будет удален. Вызов открытия/закрытия объекта не приведет к удалению файла.

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

1

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^