1) プログラムは非常に大きなテキスト ファイルを出力します。出力を新しいファイルに保存したいだけです (したがって、文字列を python オブジェクトとして保存しないでください)。 subprocess モジュールを使用してこれを行う最良の方法は何ですか?
documentationを見ると、有効な値は次のstdout
とおりです。
PIPE、既存のファイル記述子 (正の整数)、既存のファイル オブジェクト、および None。
そう:
with open('new_file.txt', 'w') as outfile:
subprocess.call(['program', 'arg'], stdout=outfile)
2) マルチプロセスモジュールを使用して、プログラムを並行して何度も呼び出したい。私は通常、単純な方法で Pool.map 関数を使用しますが、これは subprocess モジュールに干渉しますか?
あなたが特定の奇妙なことをしない限り、そうではありません。
multiprocessing.Pool
作成したプロセスを追跡し、他の場所で作成された他の子プロセスを管理しようとしないため、心配していることは明らかです。
私が見た中で最も一般的な問題は、 を使用Popen
して、取得することのない子プロセスを作成することです。のないアプリではこれでうまくいくことがよくありますが、プール タスクで -and-leakmultiprocessing
を実行するとすぐに、うまくいかなくなります。Popen
(これは実際には Python とは関係ありませんmultiprocessing
。単に、孫プロセスが子プロセスと同じではないということです。)