У меня есть этот код:
#!/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 равен 0 (без буферизации).Я также могу указать bufsize = 0, но это ничего не меняет.