【发布时间】:2014-11-11 21:20:16
【问题描述】:
我有一个用于模拟的 python 脚本,通过 for 循环运行需要相当长的时间,并且每个循环需要不同的时间来运行,所以我在每个循环之后打印一个 . 作为监控速度的方法它运行以及它在脚本运行时通过for 语句的程度。
for something:
do something
print '.',
但是,当我在终端中的 iPython 中运行脚本时,这些点不会一个一个地打印出来,而是在循环结束时一次打印出来,这使得整个事情变得毫无意义。如何在运行时打印内联点?
【问题讨论】:
-
Line buffering,很有可能。打印后尝试发出
sys.stdout.flush()。如果这样可以解决您的问题,那么缓冲实际上就是您的问题。 -
您也可以将 stdout 设置为无缓冲……但执行此类操作的常用方法正是 @LukasGraf 所建议的。除了你可能想要
sys.stdout.write('.'),而不是print '.',。首先,print会给你点之间的空格。其次,理论上允许它在stdout所做的任何事情之上进行自己的缓冲(尽管 CPython 没有,而且我不知道有任何实现)。 -
是的,它奏效了。谢谢!!我想知道是否有比仅仅打印点更好的方法......
-
sys.stdout.write也是我推荐的。对于解决方法(例如,您无法修改源代码),您可以尝试使用-u运行 Python,如 here 所述 -
尽管您的问题是关于为什么,但明显的后续问题将是“那我该如何关闭缓冲?”,所以我投票将其标记为重复。
标签: python macos terminal ipython