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);
}
4

2 に答える 2

3

私が理解しているように、「autoRemove」フラグ (デフォルトでオン) の場合、QTemporaryFile のインスタンスが存在する限り、QTemporaryFile は存在します。したがって、最初に提示されたコードでは、tmp が範囲外になると、ファイルが削除されます。オブジェクトで open / close を呼び出しても、ファイルは削除されません。

QTemporaryFile* pTmp = new QTemporaryFile を使用してファイルを動的に割り当て、Python スクリプトがいつ終了したかがわかっている場合は、後で削除することができます。

于 2013-04-24T13:49:25.577 に答える
1

ああ、私autoRemoveQTemporaryFile. これが解決策になると思います。に設定するfalseと、ファイルはディスクから削除されないため、プロセスはファイルを自由に再利用できます-私は思います。

一時ファイルはシステムのデフォルトの場所に保存する必要があるため、ファイルは再起動するまで削除されないと思います (少なくとも、Linux はこのように動作すると思います)。

これは単なるアイデアですが、他の回答や確認を待ちます。

于 2013-04-24T10:37:47.423 に答える