在Windows 3.6下的Python 3.6和3.7中使用end =“”的不可预知的打印函数行为

问题描述 投票:0回答:1

以下代码很奇怪

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 == "": 在Spyder控制台中运行代码时,它可以预测:打印"Processing... ",然后等待5秒并在同一行打印" Done"。 但在“cmd.exe”中它等待3秒,然后同时打印"Processing... Done"
  2. EOL == "\n"在Spyder控制台和cmd.exe中以相同的方式工作时:打印"Processing... ",然后等待5秒并在新行中打印" Done"

是功能还是bug?

我的环境是:

  1. ('64位','Windows PE')
  2. Windows的7-6.1.7601-SP1
  3. Python 3.7.2(默认,2019年2月11日,14:11:50)[MSC v.1915 64 bit(AMD64)]
  4. Python 3.6.6(默认,2018年6月28日,11:21:07)[MSC v.1900 32位(英特尔)]
python python-3.6 python-3.7
1个回答
1
投票

似乎Python正在等待当前行在打印之前完成。此行为可能会因不同版本或环境而异。在您的情况下,您可以添加flush parameter以强制打印部分线。

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

print("Processing... ", end=EOL, flush=True)
© www.soinside.com 2019 - 2024. All rights reserved.