Подобных сообщений много, но ответа не нашел.
В Gnu/Linux с модулями Python
и subprocess
я использую следующий код для перебора stdout/sdterr команды, запущенной с подпроцессом:
class Shell:
"""
run a command and iterate over the stdout/stderr lines
"""
def __init__(self):
pass
def __call__(self,args,cwd='./'):
p = subprocess.Popen(args,
cwd=cwd,
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT,
)
while True:
line = p.stdout.readline()
self.code = p.poll()
if line == '':
if self.code != None:
break
else:
continue
yield line
#example of use
args = ["./foo"]
shell = Shell()
for line in shell(args):
#do something with line
print line,
Это работает нормально... за исключением случаев, когда выполняется команда python
, например `args = ['python','foo.py'], и в этом случае вывод не сбрасывается, а печатается только тогда, когда команда законченный.
Есть ли решение?