【问题标题】:Delay/discrepancy between expected and actual output to iPython outputiPython 输出的预期输出和实际输出之间的延迟/差异
【发布时间】:2016-05-21 10:45:19
【问题描述】:

我正在使用 Enthought Canopy IDE 编写 Python,而 print 命令的输出在我期望的时候没有到达 ipython 输出窗口。最清楚的解释就是举个例子:

import time

print 1
print 2
time.sleep(1)
print 3

for i in range(10):
    print i
    time.sleep(0.5)

最初的123在一秒后同时显示,然后在显示下一个0之前有半秒的延迟。

(与预期的同时显示12 不同,然后在同时显示30 之前延迟1 秒,然后延迟半秒)

这引起了我的问题,因为我希望在脚本的耗时部分运行之前获取变量读数,并且在调用 print 命令后如果不终止程序,我无法让它显示这些读数。

有什么想法/解决方案吗?

我使用的是 Windows 7,如果您需要任何其他规格/配置详细信息,请告诉我...

谢谢!

【问题讨论】:

    标签: python canopy


    【解决方案1】:

    您可以使用附加的 -u 参数启动 Python 解释器,它会为您提供无缓冲的输出(即即时)。 或者您可以在每个print 之后致电sys.stdout.flush()。甚至可以将其包装在这样的函数中:

    from __future__ import print_function
    import sys
    
    def print_flush(*args):
        print(*args)
        sys.stdout.flush()
    

    【讨论】:

    • 是的,最简单的方法就是在您想查看已打印的所有内容时调用sys.stdout.flush()。这在任何程序中都可能是一个问题,但在 Canopy 的 Python 窗格中,内核(执行打印命令的位置)与前端(显示输出的位置)处于不同的进程中时更是如此。
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多