2

私はそのコードを持っています:

#!/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を指定することもできますが、それでも何も変わりません。

4

1 に答える 1

2

わかりました、それはPythonのバグのようです:http://bugs.python.org/issue3907

回線を入れ替えたら

for l in tun.stdout:

while True:
    l = tun.stdout.readline()

その後、それは私が望むように正確に機能します。

于 2010-05-14T22:38:31.740 に答える