c++ - 将 QTemporaryFile 与 QProcess 一起使用是否安全?

标签 c++ qt temporary-files qprocess

我必须从用户那里读取脚本并调用 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/

相关文章:

c++ - C++中带有模板变量的结构

c# - 从外部函数 C++ DLL 调用静态函数

c++ - Qt - 在不使用 WA_TranslucentBackground 的情况下在 Windows 中绘制一个完全透明的窗口

python - 您可以在不写入硬盘的情况下创建临时文件吗

python - 如何获得 Python 中的默认文件权限?

c++ - 如何编写模板将 vector 转换为 Json::Value (jsoncpp)

c++ - 从 C 切换到 C++ 时,在 C++ 中使用双指针的函数声明和定义会出错

c++ - glCreateShader 给出相同的 ID

qt - 对自己的 QML 类使用 float 或 double

c - 当删除使用 mkstemp() 创建的文件时?