【问题标题】:Python Read and Output from Stdin Unbuffered无缓冲标准输入的 Python 读取和输出
【发布时间】:2011-05-03 03:20:53
【问题描述】:

在 C++ 或任何其他语言中,您可以编写从标准输入连续获取输入行并在每行之后输出结果的程序。比如:

while (true) {
   readline
   break if eof

   print process(line)
}

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

【问题讨论】:

    标签: python loops stdin


    【解决方案1】:

    你有例子说明问题吗?

    例如(Python 3):

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

    在每一行之后打印每一行的长度。

    【讨论】:

    【解决方案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 不应缓冲超过换行符的文本,但如果发生这种情况,您可以尝试 sys.stdout.flush()

      【讨论】:

      • 注意:仅当输出到终端时才为真。否则 Python 将缓冲输出。所以sys.stdout.flush() 实际上是如果您需要无缓冲输出到文件的方法。
      【解决方案4】:
      $ 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多