【问题标题】:Having trouble with time.sleep时间有问题。睡觉
【发布时间】:2011-02-18 09:16:06
【问题描述】:

当我跑步时,例如:

print("[",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("]",end=" ")

10 秒内什么都没有发生,然后整个 [ = = = = = = = = = = ] 出现。我怎样才能防止这种情况发生,以便它可以充当一种进度条?

【问题讨论】:

标签: python python-3.x buffering


【解决方案1】:

实际上,进度条属于sys.stderr,它(非常方便且并非巧合)没有缓冲。所以我建议你:

print("=", end=" ", file=sys.stderr)

改为。

PS POSIX-conformant 操作系统中标准输入、输出和错误流的概要可以在 Wikipedia 中找到:Standard streams。 简而言之:stdin 是进程的输入; stdout 是过程的有用输出,即结果; stderr 用于警告、错误和带外(例如进度条)输出。

【讨论】:

  • 那会做什么?我不明白,我只是一个初学者。那还会把它输出到shell吗?
  • @Waterfox:是的,它仍然会输出到“终端”。来试试吧。
  • 看不懂,有什么区别?
  • @Waterfox:首先,使用sys.stderr 你可以print 而不必每次都调用sys.stdout.flush。其次,进度条是对程序的……进度(还有什么?)的诊断,它不是也不应该是程序标准输出的一部分;进度条和打印到标准错误是天作之合。如果这仍然让您感到困惑,请忽略我在此评论中“第二”之后所说的一切。
  • 是的,是的,我现在明白你的意思了。非常感谢。
【解决方案2】:

尝试在每次打印后刷新标准输出:

import sys

print("=",end=" ")
sys.stdout.flush()

【讨论】:

    【解决方案3】:

    每次要写入更新时,您都需要使用sys.stdout.flush() 刷新stdout

    【讨论】:

      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多