Чтение и вывод Python из Stdin без буферизации - PullRequest
3 голосов
/ 31 октября 2010

В C ++ или любых других языках вы можете писать программы, которые непрерывно принимают строки ввода из stdin и выводят результат после каждой строки. Что-то вроде:

while (true) {
   readline
   break if eof

   print process(line)
}

Кажется, я не могу получить такого рода поведение в Python, потому что он буферизирует вывод (т.е. печать не произойдет, пока цикл не выйдет (?)). Таким образом, все печатается, когда программа заканчивается. Как получить то же поведение, что и с программами на C (где endl сбрасывает).

Ответы [ 4 ]

2 голосов
/ 31 октября 2010

используйте sys.stdout.flush () для очистки буфера печати. ​​

import sys

while True:
    input = raw_input("Provide input to process")
    # process input
    print process(input)
    sys.stdout.flush()

Документы: http://docs.python.org/library/sys.html

2 голосов
/ 31 октября 2010

У вас есть пример, который показывает проблему?

Например (Python 3):

def process(line):
    return len(line)
try:
    while True:
        line = input()
        print(process(line))
except EOFError:
    pass

Печатает длину каждой строки после каждой строки.

1 голос
/ 31 октября 2010

Python не должен буферизовать текст после новой строки, но вы можете попробовать sys.stdout.flush(), если это то, что происходит.

0 голосов
/ 31 октября 2010
$ cat test.py
import sys

while True:
    print sys.stdin.read(1)

затем я запускаю его в терминале и нажимаю Enter после '123' и '456'

$ python test.py 
123
1
2
3


456
4
5
6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...