サブプロセスを使用したリアルタイム出力の取得
サブプロセスは、他のプログラムを実行し、その入出力と対話するために使用される Python の強力なモジュールです。ただし、ユーザーは、バッファリングを行わずに、実行されたプログラムからリアルタイムで出力を取得する必要があるシナリオに遭遇する可能性があります。
問題の説明
この問題は、次の使用時に発生します。標準出力をパイプとして設定した subprocess.Popen。ラップされたプログラムからの出力はバッファリングされているように見え、その結果、行ごとに配信されるのではなく、データの塊が生成されます。 bufsize パラメーターを 1 または 0 に設定しても、問題は解決されません。
解決策: readline() からの反復読み取り
前述のサブプロセスの動作にもかかわらず、次のコード スニペットはリアルタイムで効果的に出力を取得します:
while True: line = p.stdout.readline() if not line: break ...
代わりに readline() を使用します。 p.stdout を直接反復処理すると、バッファリングの問題が回避され、リアルタイムの出力取得が可能になります。
以上がPython で Subprocess.Popen からリアルタイム出力を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。