为了澄清这一点,只有当将stdout定向到文件时,直接打印到终端才能正常工作。另外,我在Mac上,所以没有stdbuf
之类的。
我有一个非常简单的文件test.py
:
import time
print("start", flush=True)
time.sleep(1)
print("end")
我用python3 test.py > test.txt
调用它。这工作很好,start
显示,然后是end
后1秒的延迟。现在我想导入NumPy:
import time
import numpy # <-
print("start", flush=True)
time.sleep(1)
print("end")
再运行一次。..现在,在1秒延迟之后,start
和end
同时出现。
在这一点上,我尝试了所有我能想象的事情:
1.这里的一切:Disable output buffering
1.使用out = file("test.txt", "w"); out.write("start\n")
1.打印到终端并使用python3 test.py 2>&1 | tee /tmp/ls.txt
定向到文件
编辑:我应该补充一点,用CTRL-C中断程序确实会使start
出现。
1条答案
按热度按时间ep6jt1vc1#
我能够复制这个。正如评论中指出的,这不是一个麻木或缓冲问题。这可能是VSCode的自动更新行为。
试试这个代码。
在我的电脑上,0和1立即显示,然后缓冲启动。此外,改变睡眠时间(例如0.08)改变这种行为。
我找不到这个规范的文档,但我假设VSCode会根据输出前几百毫秒的内容自动更改缓冲设置。简而言之,如果这种行为困扰您,您应该寻找另一个查看器或创建自己的查看器。