0

Pythonスクリプトからsubprocess.Popenを呼び出してから、通信を呼び出しています

process = subprocess.Popen(cmds, shell=shell, stdout=subprocess.PIPE,  
                               stderr=subprocess.PIPE)  

stdout, stderr = process.communicate()

これの問題は、stdout がバッファリングされ、特定の数の文字しかキャプチャされないことです。

問題は、生成したプロセスの完全な stdout と完全な stderr を取得するにはどうすればよいかということです。

4

1 に答える 1

0

ポイントのカップル。

stdout / stderrにPIPEを使用していて、Popenedプロセスが大量のデータの書き込みを開始し、プロセスでstdout / stderrを読み取っていない場合、Popenedプロセスはブロックします。これは一種のように述べられています

Note

Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.

あなたが指摘した他のメモについて。これは、 stdout = None、stderr=NoneでPopenする場合にのみ適用されます。その場合、Popenedプロセスのout/errはすべてメモリに保存されます。

于 2012-07-04T04:29:46.263 に答える