【问题标题】:Slow print waiting too long before printing [duplicate]慢速打印在打印前等待太久[重复]
【发布时间】:2019-06-21 21:12:06
【问题描述】:

下面的代码应该(我相信)打印一个字符,等待 0.4 秒然后打印下一个字符,但它等待 1.6 秒然后打印孔字符串。

这是我尝试过的一些代码

import time

def print_slow(str):
    for letter in str:
        print(letter, end='')
        time.sleep(.4)

print_slow("junk")

我的期望:j ... u ... n ... k 我得到了什么:......... junk

【问题讨论】:

    标签: python


    【解决方案1】:

    您没有定义打印标准输出的刷新。通过在 print 命令中不包含 flush=True ,它只会将所有字符存储在缓冲区中,直到函数调用解决,并且所有字符都打印在一个实例中。

    import time
    
    def print_slow(str):
        for letter in str:
            print(letter, end='', flush=True)
            time.sleep(.4)
    
    print_slow("junk")
    

    【讨论】:

      【解决方案2】:

      此问题可能与this one 重复。

      基本上,打印正在缓冲stdout。您需要在每次迭代时刷新输出:

      print(letter, end='', flush=True)
      

      【讨论】:

        【解决方案3】:
        import time, sys
        
        def print_slow(str):
            for letter in str:
                print(letter, end='')
                sys.stdout.flush()
                time.sleep(.4)
        
        print_slow("junk")
        

        只需要强制终端显示输出

        【讨论】:

          【解决方案4】:

          您需要在每次写入时刷新stdout。否则,当程序结束时,您的打印内容会立即缓冲和写入:

          import sys
          import time
          
          def print_slow(str):
              for letter in str:
                  print(letter, end='')
                  sys.stdout.flush()
                  time.sleep(.4)
          
          print_slow("junk")
          

          编辑:

          您可以通过使用-u 标志调用python 来运行您的脚本:python3 -u <scriptname.py>

          -u : 强制 stdout 和 stderr 的二进制 I/O 层无缓冲; 标准输入总是被缓冲的;文本 I/O 层将被行缓冲; 还有 PYTHONUNBUFFERED=x

          【讨论】:

          • 还是不行?
          • 扩展这个答案。当您执行 print() 语句时,您尝试打印的字符在输出到标准输出之前会被缓冲。在某些系统(例如我的 Fedora 30)上,您的代码完全按预期工作,每个字符写入后都会刷新缓冲区。在其他人身上,同样的事情不会发生。
          • @PhysicalExperience 尝试使用-u 标志运行您的脚本:python3 -u <yourscriptname.py>
          • 没什么,这个问题只有在我用end=''打印时才会出现
          • 谢谢!我的包有一些配置设置。
          猜你喜欢
          • 2015-07-06
          • 2014-07-02
          • 2023-01-25
          • 1970-01-01
          • 1970-01-01
          • 2013-12-13
          • 1970-01-01
          • 2016-10-10
          • 2016-10-14
          相关资源
          最近更新 更多