1

私は subprocess.Popen() を使用してプロセスを実行し、それらが終了するのを待ってから他のことを実行しています。単一のプロセスの場合、コードを次の一般的な形式で記述しました。

process = subprocess.pOpen(['command', 'options...', '1> output.txt'])
process.wait()

more code...

そしてそれはうまくいきました。スクリプトは、プロセスが結果を output.txt に出力するのを待ってから、「その他のコード...」に進みました。

ただし、いくつかの同時プロセスを実行するために何をすべきかわかりません。残りのコードに進むには、それらすべてが完了するのを待ちます。待機のロジックがない場合、私のコードは一般的に次のようになります。

for i in range(0, n_streams):
    os.system("start /b command [options] 1> output{0}.txt".format(i))

そしてそれはうまくいきます。各プロセスは出力をテキスト ファイルに書き込み、希望どおりに同時に実行されます。先に進む前に、すべてのプログラムがテキスト ファイルに書き込まれるまでプログラムを待機させる方法がわかりません。

私がする必要があるのは、os.system() を pOpen() に置き換えて、単一のプロセスに対して上記で行ったように wait() を使用することだけだと考え続けていますが、これにより、プロセスのインスタンスが順番に実行されるだけです。

私の質問を繰り返します: プロセスの多くのインスタンスを同時に実行し、すべてのインスタンスが終了する (それぞれの出力ファイルに書き込まれる) まで待ってから先に進むにはどうすればよいですか?

4

2 に答える 2

0

subprocess.Popen.returncodeを使用すると、サブプロセスが終了したかどうかを確認できます。

于 2013-03-25T19:36:56.230 に答える
0

開始したすべてのプロセスを保存してから、それぞれを待ちます。

# Start and store all of your processes
processes = []
for i in range(0, n_streams):
    processes.append(subprocess.Popen(['command', 'options...', '1> output.txt']))

# Wait for all of them to complete
for proc in processes:
    proc.wait()
于 2014-02-15T00:42:28.820 に答える