subprocess.Popen
(POSIXシステム上のPython 2.x)を使用して子プロセスを呼び出しています。私は、Pythonのreadline()
ファイルオブジェクト関数を使用して、子プロセスの出力を読み取ることができるようにしたいと考えています。しかし、Popen.stdout
で利用可能なストリームはreadline()
メソッドを持っていないようです。 Python readline from pipe on Linuxからのアイデアを使用してsubprocess.Popenによって返されたパイプでreadline()を使用する方法
が、私は次のことを試してみました:
p = subprocess.Popen(
[sys.executable, "child.py"],
stdout=subprocess.PIPE)
status = os.fdopen(p.stdout.fileno())
while True:
s = status.readline()
if not s:
break
print s
しかし、この方法の問題点は両方p.stdout
オブジェクトと単一のファイルディスクリプタをクローズするための新しいstatus
オブジェクトの試みということです。結果として、最終的には次のようになります。
以前に作成されたファイルライクなオブジェクトを「ラップする」ファイルオブジェクトを作成する方法はありますか?
'.fileno()'が '.readline()'メソッドを持たない 'p.stdout'をどうやって取得しますか? – jfs
@ J.F.Sebastian:それは良い質問です。私はもう一度試してみました。 'p.stdout.readline()'はうまく動作します。誤って 'p.readline()'を試みた可能性があります。これは恥ずかしいものです。 –