Я очень плохо знаком с программированием, таким образом, я приношу извинения заранее, если мой вопрос слишком глуп.
#!/usr/bin/python2.6
import subprocess, time
p=subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for i in 'abcd':
p.stdin.write(str.encode(i+'\n'))
output=p.stdout.readline()
print(output)
time.sleep(1)
Выполнение этого кода в Python 2.6 печатает буквы A, b, c, d, каждая строка вывода появляется после секунды. Это - ожидаемое поведение. Но в Python 3.1 выполнение заблокировано в строке output=p.stdout.readline()
. Как исправить это для Python 3.1?
Похоже, разница в буферизации. Добавление вызова p.stdin.flush ()
решило проблему. (См. Комментарии выше.)
Вики сообщества, поскольку я не заслуживаю похвалы за этот ответ, но некоторые ответы должны быть отмечены как принятые.
[@ Geo Pop: Пожалуйста, «примите» этот вопрос, поскольку он очевидно правильный.]