Python 2和3中如何在同一行打印输出?

5

有几种解决方案可以实现在同一行打印文本,以下是其中一种。

在Python 2中,

print "\r Running... xxx",

在Python 3中,

print("\r Running... xxx", end="")

我找不到一个能同时支持python 2和3的打印解决方案。我必须使用sys.stdout.write吗?


由于在Python 2中print是一个语句,因此您不需要使用括号。 - Martijn Pieters
1
为什么不在同一行中将要连接的部分字符串连接成一个字符串?print("%s%s%s) % (string_1, string_2, string_3) - Trimax
@Trimax:也许你的进程运行太慢了,需要提供反馈? - Martijn Pieters
@MartijnPieters 感谢您指出括号的问题! - lqez
2个回答

18

使用 from __future__ import print_function,并在 Python 2 和 Python 3 中都使用 print() 函数:

from __future__ import print_function

print("\r Running... xxx", end="")  # works across both major versions

请查看Python 2中print()函数文档

注意:由于名称print被识别为print语句,因此此函数通常不作为内置函数提供。要禁用语句并使用print()函数,请在模块顶部使用此future语句:

from __future__ import print_function

print() 函数是在 Python 2.6 版本中添加的。


它可以工作。但仍需要 sys.stdout.flush() 来刷新输出缓冲区。有没有任何解决方法? - lqez
1
不,只有Python 3.3及以上版本才提供“flush”关键字。您可以提供自己的包装器来添加刷新调用。 - Martijn Pieters
@lqez:有什么需要我澄清的吗?你接受了,然后又取消了,是我漏掉了什么吗? - Martijn Pieters
不是的,我只是取消了它,想问一下关于清空缓存的事情。谢谢。 - lqez

7

使用

from __future__ import print_function

在Python 2中,使用print作为一个函数,同样也需要这样做。

print("\r Running... xxx", end="")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接