来自Stdin Unbuffered的Python读取和输出

时间:2010-10-31 18:15:36

标签: python loops stdin

在C ++或任何其他语言中,您可以编写连续从stdin获取输入行的程序,并在每行后输出结果。类似的东西:

while (true) {
   readline
   break if eof

   print process(line)
}

我似乎无法在Python中获得这种行为,因为它会缓冲输出(即在循环退出(?)之前不会进行打印)。因此,程序完成后会打印所有内容。如何获得与C程序相同的行为(其中endl刷新)。

4 个答案:

答案 0 :(得分:2)

你有一个显示问题的例子吗?

例如(Python 3):

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

打印每行后每行的长度。

答案 1 :(得分:2)

使用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 :(得分:1)

Python不应该将文本缓冲到换行符之外,但如果发生了这种情况,你可以尝试sys.stdout.flush()

答案 3 :(得分:0)

$ cat test.py
import sys

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

然后我在终端中运行它并在'123'和'456'之后按Enter键

$ python test.py 
123
1
2
3


456
4
5
6