4

私がこれを書いたとしましょう:

from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)

今私がするなら

line = p.stdout.readline()

私のプログラムは、サブプロセスが次の行を出力するまで待機します。

出力がある場合は出力を読み取ることができるようにするためにできる魔法はありますp.stdoutが、それ以外の場合は続行しますか? 私は次のようなものを探していますQueue.get_nowait()

を読み取るためのスレッドを作成できることはわかってp.stdoutいますが、新しいスレッドを作成できないと仮定しましょう。

4

2 に答える 2

8

これを使用p.stdout.read(1)すると、文字ごとに読み取られます

そして、ここに完全な例があります:

import subprocess
import sys

process = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

while True:
    out = process.stdout.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()
于 2009-05-19T14:36:21.523 に答える
5

selectPython の標準ライブラリのモジュールを使用します。 http://docs.python.org/library/select.htmlを参照してください。 select.select([p.stdout.fileno()], [], [], 0)アイテムが 3 つのリストであるタプルをすぐに返します。最初のリストは、そのファイル ディスクリプタで読み取るものがあれば空ではありません。

于 2009-05-19T14:42:41.230 に答える