猿问

如何冲洗输出的打印功能?

如何冲洗输出的打印功能?

如何强制Python的打印函数输出到屏幕上?

这不是禁用输出缓冲-联系的问题是尝试无缓冲的产出,而这是比较普遍的问题。这个问题中最重要的答案对于这个问题来说过于强大或牵扯(对于这个问题它们不是很好的答案),这个问题可以通过一个相对的新手在Google上找到。


交互式爱情
浏览 545回答 4
4回答

一只名叫tom的猫

import sys sys.stdout.flush()print默认情况下打印到sys.stdout.参考文献Python 2这个print陈述sys.stdout文件对象Python 3print()sys.stdout文件对象-词汇表io.IOBase.flush() (sys.stdout继承flush法io.IOBase)

阿波罗的战车

跑动python -h,我看到一个命令行选项:-u:未缓冲的二进制标准输出和stderr;还有PYTHONBUFFERED=x

郎朗坤

从Python3.3开始,您可以强制使用普通的print()函数不需要使用就可以进行刷新。sys.stdout.flush();只需将“刷新”关键字参数设置为true。打印(*Object,Sep=‘,end=’\n‘,file=sys.stdout,刷新=false)将对象打印到流文件,然后用SEP分隔,然后再输出End。如果存在,则必须将SEP、End和file作为关键字参数。所有非关键字参数都被转换为字符串,如str()所做的,并将其写入流中,然后用SEP分隔,后面跟着End。SEP和End都必须是字符串;它们也可以是None,这意味着使用默认值。如果没有给出对象,print()将只写End。文件参数必须是带有写(字符串)方法的对象;如果它不存在或不存在,则将使用sys.stdout。输出是否缓冲通常由文件决定,但如果FLUSH关键字参数为真,则强制刷新流。

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

相关分类

Python
我要回答