gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:02:09 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com