为了澄清这一点,只有在将标准输出定向到文件时,直接打印到终端才能正常工作.另外,我用的是Mac,所以不是stdbuf之类的.

我有一个非常简单的文件test.py:

import time
print("start", flush=True)
time.sleep(1)
print("end")

我拿python3 test.py > test.txt美元来算.这很有效,在延迟1秒后,start显示出来,end显示出来.现在我想导入NumPy:

import time
import numpy # <-
print("start", flush=True)
time.sleep(1)
print("end")

再运行一次.现在,在延迟1秒后,startend同时出现.

在这一点上,我已经try 了所有我能想象到的东西:

  1. 这里的一切:Disable output buffering
  2. 使用out = file("test.txt", "w"); out.write("start\n")
  3. 打印到终端并定向到带有python3 test.py 2>&1 | tee /tmp/ls.txt的文件

编辑:我应该补充的是,用CTRL-C中断程序确实会让start显示出来.

推荐答案

我能够重现这一切.正如 comments 中指出的那样,这不是一个麻木或缓冲的问题.这很可能是VSCode的自动更新行为.

请try 使用此代码.

import time

started = time.perf_counter()
for i in range(20):
    print(f"{i}: {time.perf_counter() - started:.2f}", flush=True)
    time.sleep(0.1)

在我的PC上,0和1立即显示,然后缓冲开始起作用.此外,更改睡眠时间(如0.08)也会更改此行为.

我找不到此规范的文档,但我假设VSCode会根据输出的前几百毫秒的内容自动更改其缓冲设置.简而言之,如果此行为困扰您,您应该寻找其他查看器或创建自己的查看器.

Python相关问答推荐

在Python中对分层父/子列表进行排序

如何计算两极打印机中 * 所有列 * 的出现次数?

将特定列信息移动到当前行下的新行

如何检测背景有噪的图像中的正方形

根据另一列中的nan重置值后重新加权Pandas列

如何在solve()之后获得症状上的等式的值

当独立的网络调用不应该互相阻塞时,'

Python—从np.array中 Select 复杂的列子集

计算每个IP的平均值

多指标不同顺序串联大Pandas 模型

在单个对象中解析多个Python数据帧

Polars asof在下一个可用日期加入

如何在达到end_time时自动将状态字段从1更改为0

计算空值

如何过滤组s最大和最小行使用`transform`'

极点替换值大于组内另一个极点数据帧的最大值

pytest、xdist和共享生成的文件依赖项

我可以同时更改多个图像吗?

利用广播使减法更有效率

如何在Python中画一个只能在对角线内裁剪的圆?