Python 从无缓冲的标准输入读取和输出

4 投票
4 回答
3716 浏览
提问于 2025-04-16 06:21

在C++或者其他编程语言中,你可以写一个程序,让它不停地从标准输入(stdin)读取输入的每一行,然后在每一行后面输出结果。就像这样:

while (true) {
   readline
   break if eof

   print process(line)
}

但是我在Python中似乎无法实现这种行为,因为Python会把输出先存起来(也就是说,直到循环结束之前不会打印任何东西)。所以,所有的内容都是在程序结束时才一起打印出来。我该怎么做才能让Python的行为和C语言的程序一样(在这里,endl会立即输出)呢?

4 个回答

1

在Python中,文本在遇到换行符时不应该被缓存,但如果你遇到这种情况,可以试试 sys.stdout.flush() 这个命令。

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

3

你有没有一个例子来说明这个问题呢?

比如说(Python 3):

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

这个代码会在每一行后面打印出该行的长度。

撰写回答