我必须从用户那里读取脚本并调用QProcess
将该脚本作为文件传递。
例如,用户插入此Python脚本
import sys
print(sys.copyright)
我必须将该脚本放入文件中,然后使用该文件调用python解释器。
我以为使用
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);
}
最佳答案
据我了解,在“autoRemove”标志(默认情况下处于启用状态)的情况下,只要存在QTemporaryFile实例,QTemporaryFile就将存在。因此,在您最初显示的代码中,当tmp超出范围时,该文件将被删除。调用对象的打开/关闭操作不会删除该文件。
如果知道python脚本何时完成,则可以使用QTemporaryFile * pTmp = new QTemporaryFile动态分配文件,然后稍后将其删除。