私はそのコードを持っています:
#!/usr/bin/python -u
localport = 9876
import sys, re, os
from subprocess import *
tun = Popen(["./newtunnel", "22", str(localport)], stdout=PIPE, stderr=STDOUT)
print "** Started tunnel, waiting to be ready ..."
for l in tun.stdout:
sys.stdout.write(l)
if re.search("Waiting for connection", l):
print "** Ready for SSH !"
break
「./newtunnel」は終了せず、常により多くのデータをstdoutに出力します。ただし、そのコードは出力を提供せず、tun.stdoutで待機し続けます。
newtunnelプロセスを外部で強制終了すると、すべてのデータがtun.stdoutにフラッシュされます。そのため、tun.stdoutの実行中は、データを取得できないようです。
何故ですか?どうすれば情報を入手できますか?
Popenのデフォルトのbufsizeは0(バッファなし)であることに注意してください。bufsize = 0を指定することもできますが、それでも何も変わりません。