1. ホーム
  2. python

[解決済み] subprocess.communication()からストリーミング入力を読み込む。

2023-03-30 12:15:43

質問

私はPythonの subprocess.communicate() を使用して、約1分間実行されるプロセスから標準出力を読み込んでいます。

どうすれば、そのプロセスの各行をプリントアウトすることができるでしょうか。 stdout の各行をストリーミング形式で印刷し、生成される出力を見ることができますが、それでも継続する前にプロセスが終了するのをブロックするにはどうしたらよいでしょうか?

subprocess.communicate() は一度にすべての出力を与えるように見えます。

どのように解決するのですか?

ご注意ください、私は J.F.セバスチャンの方法(下) の方が良いと思います。


以下は簡単な例です(エラーチェックはしていません)。

import subprocess
proc = subprocess.Popen('ls',
                       shell=True,
                       stdout=subprocess.PIPE,
                       )
while proc.poll() is None:
    output = proc.stdout.readline()
    print output,

もし ls の終了が速すぎる場合、すべてのデータを読み込む前に while ループが終了してしまう可能性があります。

この方法で、stdoutに残りをキャッチすることができます。

output = proc.communicate()[0]
print output,