Почему этот код ведет себя иначе в Python3.1, чем в Python2.6? - PullRequest
5 голосов
/ 20 декабря 2009

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

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

1 Ответ

3 голосов
/ 21 декабря 2009

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

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

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

...