【问题标题】:print(foo, end="") not working in terminalprint(foo, end="") 在终端不工作
【发布时间】:2016-02-05 18:23:19
【问题描述】:

所以这是一些应该打印文本的代码,类似于 Pokemon 的做法。纯粹是为了好玩。

问题是程序在终端运行时print(x, end="")不起作用,但使用IDLE运行时却正常。

import time

lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

for x in lorem:
    print(x, end="")
    time.sleep(0.03)

由于某种原因,如果我在 print(x, end="") 之前添加一个打印语句,程序可以正常工作。

for x in lorem:
    print()
    print(x, end="")
    time.sleep(0.03)

有人知道是什么原因造成的吗?也许如何解决它?

【问题讨论】:

  • 看起来您的终端在打印换行符之前不会刷新输入(这是第二个程序中的 print() 所做的)。让上面的程序运行一段时间,你最终应该会得到一个输出。
  • 当它不起作用时会发生什么?
  • print(x, end="")之后添加sys.stdout.flush()
  • 您可以无缓冲地运行 Python。搜索命令行设置。
  • Disable output buffering的可能重复

标签: python printing


【解决方案1】:

这是因为 python 使用缓冲区写入标准输出。为了得到想要的效果,你必须在代码末尾加上sys.stdout.flush()...

import time, sys

lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

for x in lorem:
    print(x, end="")
    time.sleep(0.03)
    sys.stdout.flush()

这将以每 0.03 秒 1 个字符的速度单独打印出每个字符

【讨论】:

  • 或者,print(x, end="", flush=True)。 (仅限python 3.3+)
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2017-07-13
  • 1970-01-01
  • 2015-08-11
相关资源
最近更新 更多