Я пытаюсь использовать subprocess
для обработки потоков. Мне нужно записать данные в поток и уметь читать с него асинхронно (до того, как программа умрет, потому что у меня будет минут, чтобы завершить, однако выход ее продукции).Обработка stdin и stdout
Для случая узнать, я был с помощью команды timeout
с Windows 7:
import subprocess
import time
args = ['timeout', '5']
p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False)
p.stdin.write('\n') # this is supposed to mimic Enter button pressed event.
while True:
print p.stdout.read() # expected this to print output interactively. This actually hungs.
time.sleep(1)
Где я ошибаюсь?
Он считывает данные до EOF буфера. Он не будет висел, если буфер пуст. – iTayb
@iTayb Нет, он ждет окончания файла. Для конца файла конца файла происходит процесс закрытия ввода или завершения процесса ввода-вывода. EOF не происходит просто потому, что процесс временно прекращает запись. Попробуйте, например. запуск 'python -c" import sys; print sys.stdin.read() "' и посмотреть, отражает ли это только первую строчку, которую вы пишете, или каждую строку, которую вы пишете, указав EOF с помощью Ctrl-Z/Ctrl-D/аналогичного , – svk