我有一个用Python编写的脚本,用于进行模拟。每次迭代的运行时间长短不一,因此我在每个循环后打印一个
然而,当我运行代码时,这些点并没有一个接一个的出现。相反,当循环结束时,所有的点都会一次性打印出来,这使得所有的努力都失去了意义。如何在代码运行时以内联方式打印这些点?
这个问题也可能发生在迭代从另一个进程提供的数据并尝试打印结果时,例如回显来自Electron应用程序的输入。请参见Python not printing output。
.
,以便监视它的运行速度和在脚本运行时通过for
语句走了多远。因此,代码的结构大致如下:for step in steps:
run_simulation(step)
# Python 3.x version:
print('.', end='')
# for Python 2.x:
# print '.',
然而,当我运行代码时,这些点并没有一个接一个的出现。相反,当循环结束时,所有的点都会一次性打印出来,这使得所有的努力都失去了意义。如何在代码运行时以内联方式打印这些点?
这个问题也可能发生在迭代从另一个进程提供的数据并尝试打印结果时,例如回显来自Electron应用程序的输入。请参见Python not printing output。
sys.stdout.flush()
命令。如果这解决了你的问题,那么缓冲确实是你的问题所在。 - Lukas Grafsys.stdout.write('.')
而不是print '.',
。首先,print
会在点之间给你空格。其次,它理论上允许在stdout
所做的任何缓冲之上进行自己的缓冲(尽管CPython不会这样做,我也不知道有哪个实现会这样做)。 - abarnertsys.stdout.write
。如果需要绕过问题(例如无法修改源代码),可以尝试按照这里所述使用Python的-u
选项来运行。 - mtik00