我有那个代码:
#!/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”不会退出,它会不断地向标准输出输出越来越多的数据。但是,该代码不会给出任何输出,只会在 tun.stdout 中等待。
当我在外部终止 newtunnel 进程时,它会将所有数据刷新到 tun.stdout。因此,似乎在 tun.stdout 仍在运行时我无法从它获取任何数据。
这是为什么?如何获取信息?
请注意,Popen 的默认 bufsize 为 0(无缓冲)。我也可以指定 bufsize=0 但这不会改变任何东西。