如何在Python 2.7中打印不带换行符且不缓冲的内容

5
我需要在Python 2.7中将文本打印到控制台,但不要带有换行符,这样我就可以在同一行上使用未来的代码继续编写更多文本。我的当前实现涉及从future库导入Python 3的print函数,并使用end=''。这并不理想,因为如果我打印一行,例如:
print("We're doing something...",end='')

接下来编写其他代码,然后添加如下一行:

print("we finished doing that thing.")

这行代码会被打印出来,但是它会一次性全部输出,也就是说它会被缓存直到带有换行符的打印语句出现。我更喜欢能够将第一个打印字符串输出到控制台,执行其他代码,然后再输入带有换行符的部分。我无法在Python 2.7中找到任何方法来实现这一点。也许有人可以指导我如何实现?谢谢。
对于那些建议使用环境缓冲区修复的人,它并没有起作用。它只影响文件输出和一些其他与此无关的杂项事项。下面有一个总体上可行的答案。

https://dev59.com/inVD5IYBdhLWcg3wDHDm - cs95
那个讨论似乎没有提供我所需要的内容。 - Will
1个回答

8

在你的文件开头添加以下内容:

from __future__ import print_function

然后你可以像在Python 3上一样使用endflush命名参数。看起来你缺少了flush参数:

print("We're doing something...",end='', flush=True)

如果由于某些原因您不能或不想这样做,您应在旧版本的print语句结尾添加一个逗号。如果需要打印部分行,则必须在打印后立即手动调用sys.stdout.flush()
 print "We're doing something...",
 sys.stdout.flush()
 ...
 print "Done!"

他们已经在使用print函数及其end参数,但没有意识到flush的存在,因此您可能需要更加强调flush - user2357112
我有这段代码from __future__ import print_function print("Initializing...", end='', flush=True),但是它会提示错误 TypeError: 'flush' is an invalid keyword argument for this function。虽然根据Python 3文档来看,这似乎是我所需的功能并且也使用了正确的关键字...不知道出了什么问题。 - Will
2
事实证明,在2.7版本中,print函数缺少必要的元素才能以这种方式运行,因此可以使用以下方法:包装Python 2.7的print函数 - Will

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