У меня проблемы с перенаправлением stdio другой программы с помощью модуля подпроцесса. Простое чтение из stdout приводит к зависанию, и Popen.communicate () работает, но закрывает каналы после чтения / записи. Как проще всего это реализовать?
Я играл с этим в окнах:
import subprocess
proc = subprocess.Popen('python -c "while True: print \'Hi %s!\' % raw_input()"',
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
while True:
proc.stdin.write('world\n')
proc_read = proc.stdout.readline()
if proc_read:
print proc_read
-u
флаг решит эту проблему для подпроцесса Python. Также существуют модулиpexpect
,pty
и _ 4_,stdbuf
,script
, которые могут помочь решить проблему с буферизацией блоков. - person jfs   schedule 22.05.2013