Windows下Python 3.6和3.7中带有end =“”的不可预测的打印功能行为

时间:2019-02-14 09:26:37

标签: python python-3.6 python-3.7

以下代码很奇怪

import time

def test_print_end(EOL):
    for i in range(3):
        print("Processing... ", end=EOL)
        # You may replace ``time.sleep(5)`` with the long-time processing.
        time.sleep(5)
        print("Done")    

print('EOL == ""')
test_print_end(EOL = "")
print('EOL == "\\n"')
test_print_end(EOL = "\n")
  1. EOL == ""时:

    1. 在Spyder控制台中运行代码时,它可以预期地工作:打印"Processing... ",然后等待5秒钟,并在同一行中打印" Done"
    2. 但是在“ cmd.exe”中,它会等待3秒钟,然后同时打印"Processing... Done"
  2. EOL == "\n"在Spyder控制台和cmd.exe中的工作方式相同:先打印"Processing... ",然后等待5秒钟,然后在新行中打印" Done"

它是功能还是错误?

我的环境是:

  1. ('64bit','WindowsPE')
  2. Windows-7-6.1.7601-SP1
  3. Python 3.7.2(默认,2019年2月11日,14:11:50)[MSC v.1915 64位(AMD64)]
  4. Python 3.6.6(默认,2018年6月28日,11:21:07)[MSC v.1900 32位(Intel)]

1 个答案:

答案 0 :(得分:1)

似乎Python正在等待当前行完成才打印它。在不同的版本或环境中,此行为可能有所不同。根据您的情况,您可以添加flush parameter来强制打印部分行。

  

是否缓冲输出通常由文件确定,但是如果flush关键字参数为true,则将强制刷新流。

print("Processing... ", end=EOL, flush=True)