私はPython 3でサブプロセスを実行し、常に出力を読み込もうとしています。私は、以下を参照してくださいのPython 3でsubprocess
のドキュメントでPython 3のサブプロセスでPopenの待機や通信を使ってstdoutを読むべきでしょうか?
:
Popen.wait(タイムアウト=なし)
子プロセスが終了するまで待ち。 returncode属性を設定して返します。 警告stdout = PIPEおよび/またはstderr = PIPE を使用すると、デッドロックが発生し、子パイプラインがパイプに十分な出力を生成し、OSパイプバッファがより多くのデータを受け入れるのをブロックするようになります。それを避けるには communicate()を使用してください。
私はcommunicate
を使用するべきだと思います。標準出力からのデータ量がかなり大きいからです。しかし、再びドキュメントを読んで、この例を示します。
Popen.communicate(入力=なし、タイムアウト=なし)...
をプロセスとの対話:標準入力にデータを送信します。ファイルの終わりに達するまで、stdoutとstderrからデータを読み込みます。
メモデータの読み込みはメモリにバッファされているため、データサイズが大きい場合または の値が無制限の場合は、この方法を使用しないでください。
このように、やはりstarndardをサブプロセスからこのように読み取ることには問題があるようです。誰かが、サブプロセスを実行し、(潜在的に大量の)stdoutをすべて読み取るための最も安全な方法を教えてもらえますか?
は、これらのメソッドの両方お待ちしております役立つことを願っています。 –
私はそれを逃した。ありがとうございました。私もこれを閉じるために投票する。 – Startec