23

長くて時間のかかる出力を生成するプロセスから読み取ろうとしています。ただし、生成されたときに出力をキャッチしたいと思います。しかし、次のようなものを使用すると、コマンドの出力がバッファリングされているように見えるため、出力行を一度に取得することになります。

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=0)
    for line in p.stdout:
        print line

MacOS 10.5でこれを試しています

4

3 に答える 3

29

ファイル反復子は、独自に内部バッファリングを行っています。これを試して:

line = p.stdout.readline()
while line:
    print line
    line = p.stdout.readline()

また、実行中のプロセスが実際に出力バッファを頻繁にフラッシュしていることを確認する必要があります。

于 2009-07-26T03:30:39.167 に答える
6

通常、すべてのプログラムは、その入力および/または出力チャネルで、あなたが望むよりも多くのバッファリングを行います...そのチャネルが実際に端末であると信じ込まない限り!

その「正当な理由をだます」目的のために、pexpectを使用してください。代わりに Mac を使用します)。

于 2009-07-26T05:08:32.090 に答える
3

これは実際にはPython2.6で修正されたバグでした:http://bugs.python.org/issue3907

于 2012-01-30T19:26:19.477 に答える