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”不会退出,它会不断地向标准输出输出越来越多的数据。但是,该代码不会给出任何输出,只会在 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 回答