【问题标题】:Why does this Python code not print anything为什么这个 Python 代码不打印任何东西
【发布时间】:2021-01-08 16:55:55
【问题描述】:

我想知道,为什么这个 Python 代码没有在我的控制台中打印任何内容?

from time import sleep
while True:
    print('#', end='')
    sleep(1)

如果我删除 sleep 函数它可以工作,如果我删除 end='' 部分它也可以工作。我正在使用 Python 3.9,并且已经使用 Dash、Bash 和 ZSH 对其进行了测试。我可以使用以下代码实现所需的输出。

from time import sleep
hash = '#'
while True:
    print('\r' + hash, end='')
    hash = hash + '#'
    sleep(1)

提前谢谢你。

【问题讨论】:

  • 上述代码正在打印中
  • 我刚刚检查了你的代码,它运行良好,你能再次指定你的问题吗?
  • @AtaReenes 在我中断脚本运行之前,标准输出上没有显示任何内容。不过,我已经收到了有效的答案。
  • 有趣的是您目前使用的是哪个编译器或 IDE?
  • @AtaReenes 我只是使用 Python 3.9 解释器从终端运行脚本。

标签: python python-3.x


【解决方案1】:

我认为这是由于缓冲。尝试将flush=True 作为可选参数之一添加到print

【讨论】:

  • 这行得通,谢谢。我会尽快将其标记为答案。
  • 恕我直言,如果在指定end=... 时自动启用flush=True,那就太好了。 (我知道这种改变的可能性为零)。
  • @VPfB 您可以通过多种方式实现这一目标。 1,您可以使用标志-u 运行Python,它会无缓冲。 2、可以将文件描述符sys.stdout改为不缓冲。查看stackoverflow.com/q/107705/2327379了解更多详情。
【解决方案2】:

使用print 时,除非您使用end 参数覆盖它(如您所做的那样),否则会在您的字符串中添加一个换行符。出于性能原因,存在一个仅在遇到换行符或缓冲区填满时才打印的 I/O 缓冲区。由于您的字符串不再包含换行符,因此您必须手动刷新缓冲区(即发送以进行打印)。

from time import sleep
hash = '#'
while True:
    print('\r' + hash, end='', flush=True)
    hash = hash + '#'
    sleep(1)

【讨论】:

  • @RayBern 抱歉,我之前的评论有误。似乎\r 处的缓冲区也刷新了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2013-04-06
  • 2019-05-18
  • 1970-01-01
  • 2015-08-23
  • 2012-12-30
相关资源
最近更新 更多