我有那段代码:
#!/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,但这不会改变任何东西。
答案 0 :(得分:2)
好吧,这似乎是Python中的一个错误:http://bugs.python.org/issue3907
如果我换行
for l in tun.stdout:
通过
while True:
l = tun.stdout.readline()
然后它按照我想要的方式工作。