Почему этот код ведет себя по-другому в Python3.1, чем в Python2.6?

Я очень плохо знаком с программированием, таким образом, я приношу извинения заранее, если мой вопрос слишком глуп.

#!/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?

5
задан skaffman 20 December 2009 в 20:11
поделиться

1 ответ

Похоже, разница в буферизации. Добавление вызова p.stdin.flush () решило проблему. (См. Комментарии выше.)

Вики сообщества, поскольку я не заслуживаю похвалы за этот ответ, но некоторые ответы должны быть отмечены как принятые.

[@ Geo Pop: Пожалуйста, «примите» этот вопрос, поскольку он очевидно правильный.]

3
ответ дан 15 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: