我知道您可以通过设置flush=True
来在打印语句后刷新,例如:
print("Hello World!", flush=True)
然而,如果你需要大量的打印输出,手动为每个打印操作设置flush=True
会非常繁琐。那么是否有一种方法可以将Python 3.x的默认设置为flush=True
呢?我正在考虑类似于使用numpy.set_printoptions
的打印选项。
partial
:from functools import partial
print_flushed = partial(print, flush=True)
print_flushed("Hello world!")
从文档中得知:
partial() 函数用于部分函数应用,它“冻结”函数的一些参数和/或关键字,从而产生一个具有简化签名的新对象。
其中一个选项是创建自己的
def print_r(data):
print(data, flush=True)
def decorator(func):
printer = func
def wrapped(*args):
printer(*args, end=' *\n', flush=True)
return wrapped
print = decorator(print)
for i in range(5):
print(i)
0 *
1 *
2 *
3 *
4 *
end=' *\n'
?而且为什么要使用装饰器呢? - user2357112end
是故意放置的,以展示我们可以为参数设置任何值。此外,我不知道 Python 中有这样的 partial
。 - Henry Tjhiaflush=True
的效果在输出中不可见。 - Asociaprint()
调用在文件中执行时都带有check=True
参数。import functools
print = functools.partial(print, flush=True) # all print()s will be called with "flush=True"
此解决方案通过使用 partial
功能覆写了print()
方法,其描述如下:
partial()用于部分函数应用,它“冻结”了函数的一部分参数和/或关键字,从而产生一个具有简化签名的新对象。
stdbuf
更改 stdout 的缓冲区会更合理一些? - dedObed