使用QTemporaryFile和QProcess是否安全?

3

我需要读取用户输入的脚本并通过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);
}
2个回答

3
据我所知,在“autoRemove”标志的情况下(默认情况下),只要QTemporaryFile的实例存在,该文件就会存在。因此,在您最初提供的代码中,当tmp超出范围时,文件将被删除。在对象上调用open / close不会删除文件。

如果您知道python脚本何时完成对它的操作,可以使用QTemporaryFile* pTmp = new QTemporaryFile动态分配文件,然后稍后删除它。


1

哎呀,我刚注意到 QTemporaryFile 中的 autoRemove 标志。我想这可能是一个解决方案:如果设置为 false,则文件不会从磁盘中删除,因此进程可以自由地重新使用该文件 - 我想。

临时文件应存储在系统默认位置,所以我想文件直到重启后才会被删除(至少,我相信Linux是这样工作的)。

这只是一个想法,但我会等待其他答案或确认。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接