我必须从用户那里读取脚本并调用 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 超出范围时,该文件将被删除。在对象上调用打开/关闭不会删除文件。
您可以使用 QTemporaryFile* pTmp = new QTemporaryFile 动态分配文件,然后在稍后删除它,如果您知道 python 脚本何时完成它的话。
关于c++ - 将 QTemporaryFile 与 QProcess 一起使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189679/