12345678_0001
如何冲洗Python打印输出?我建议采取五种方法:在Python 3中,调用print(..., flush=True)(Python2的print函数中不能使用刷新参数,并且没有打印语句的模拟)。打电话file.flush()例如,在输出文件(我们可以包装python 2的打印函数)上,sys.stdout将此应用于模块中每个带有部分函数的打印函数调用,print = partial(print, flush=True)应用于模块全局。将其应用于带有标志的进程(-u)传递给解释器命令将此应用于您环境中的每个python进程。PYTHONUNBUFFERED=TRUE(并取消设置变量以撤消此操作)。Python 3.3+使用Python3.3或更高版本,您只需提供flush=True作为关键字参数。print职能:print('foo', flush=True)Python 2(或<3.3)他们没有支持flush参数设置为Python2.7,因此如果您使用Python 2(或小于3.3),并且希望代码与2和3兼容,那么我可以建议使用以下兼容性代码。(注意__future__导入必须在/非常“靠近模块顶部"):from __future__ import print_functionimport sysif sys.version_info[:2] < (3, 3):
old_print = print
def print(*args, **kwargs):
flush = kwargs.pop('flush', False)
old_print(*args, **kwargs)
if flush:
file = kwargs.get('file', sys.stdout)
# Why might file=None? IDK, but it works for print(i, file=None)
file.flush() if file is not None else sys.stdout.flush()上述兼容性代码将涵盖大多数用途,但为了进行更彻底的处理,见six模块.或者,你可以打电话给file.flush()例如,在打印之后,使用Python 2中的print语句:import sysprint 'delayed output'sys.stdout.flush()将一个模块中的默认值更改为flush=True可以通过在模块的全局范围上使用Functiontools.分部来更改打印函数的默认值:import functoolsprint = functools.partial(print, flush=True)如果您看一下我们的新的分部函数,至少在Python 3中是这样的:>>> print = functools.partial(print, flush=True)>>> printfunctools.partial(<built-in function print>, flush=True)我们可以看到它的工作和正常一样:>>> print('foo')foo我们实际上可以覆盖新的默认设置:>>> print('foo', flush=False)foo请再次注意,这只会更改当前全局范围,因为当前全局作用域上的打印名称将覆盖内建物。print函数(如果使用Python 2,则在当前全局范围内取消兼容性函数)。如果您想在一个函数中而不是在一个模块的全局范围内这样做,您应该给它一个不同的名称,例如:def foo():
printf = functools.partial(print, flush=True)
printf('print stuff like this')如果在函数中声明它是全局的,那么就在模块的全局命名空间上更改它,所以应该将它放在全局命名空间中,除非特定的行为正是您所希望的。更改进程的默认值我认为这里最好的选择是使用-u标志以获得未缓冲的输出。$ python -u script.py或$ python -um package.module从博士:强迫stdin、stdout和stderr完全不缓冲。在重要的系统上,也将stdin、stdout和stderr放在二进制模式中。注意,在file.readline()和File对象(sys.stdin中的行)中存在内部缓冲,它不受此选项的影响。要解决这个问题,您需要在while 1:循环中使用file.readline()。更改shell操作环境的默认值如果将环境变量设置为非空字符串,则可以对环境中的所有python进程或从环境继承的环境中获得此行为:例如,在Linux或OSX中:$ export PYTHONUNBUFFERED=TRUE或Windows:C:\SET PYTHONUNBUFFERED=TRUE从博士:平底如果设置为非空字符串,则等于指定-u选项。增编下面是Python2.7.12中打印函数的帮助-注意否 flush论点:>>> from __future__ import print_function>>> help(print)print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.