2009-12-20 4 views
5

Я очень новичок в программировании, поэтому заранее извиняюсь, если мой вопрос слишком глуп.Почему этот код ведет себя по-другому в 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?

+0

, что именно происходит, когда выполнение блокируется? У вас есть ошибка, которую вы могли бы показать? – Ben

+0

не ошибки, только подсказки для ввода; этот код был выполнен в окне терминала –

+5

При догадких это могут быть различия в буферизации; что-то изменилось, если вы добавили вызов p.stdin.flush после записи? – 2009-12-20 19:52:31

ответ

3

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

Сообщество wiki as Я не имею кредитов для этого ответа, но некоторые ответы должны быть отмечены как принятые.

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

 Смежные вопросы

  • Нет связанных вопросов^_^