1. 首页
  2. Python

python中stdout输出不缓存的设置方法

“u003Cdivu003Eu003Cpu003E考虑以下python程序:u003Cu002Fpu003Eu003Cpreu003E#!u002Fusru002Fbinu002Fenv pythonu003Cbru003Eimport sysu003Cbru003Esys.stdout.write(“stdout1 “)u003Cbru003Esys.stderr.write(“stderr1 “)u003Cbru003Esys.stdout.write(“stdout2 “)u003Cbru003Esys.stderr.write(“stderr2 “)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E其中的sys.stdout.write也可以换成print。u003Cu002Fpu003Eu003Cpu003E运行这程序,你觉得会输出什么?试验一下,就会发现,其实输出并不是u003Cu002Fpu003Eu003Cpreu003Estdout1 stderr1 stdout2 stderr2u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E而是:u003Cu002Fpu003Eu003Cpreu003Estderr1 stderr2 stdout1 stdout2u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E究其原因,是因为缓存:虽然stderr和stdout默认都是指向屏幕的,但是stderr是无缓存的,程序往stderr输出一个字符,就会在屏幕上显示一个;而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。这就是为什么上面的会显示两个stderr的原因了。u003Cu002Fpu003Eu003Cpu003E然而,有时候,你可能还是希望stdout的行为和stderr一样,能不能实现呢?当然是可以的,而且对于python,实现起来还特别方便,以下是两个方法:u003Cu002Fpu003Eu003Cpreu003Epython -u stderr_stdout.pyu003Cbru003EPYTHONUNBUFFERED=1 python stderr_stdout.pyu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E第一种方法是给python指定 -u 参数,第二种方法是在python运行时,指定 PYTHONUNBUFFERED 环境变量,这两种方法其实是等效的。u003Cu002Fpu003Eu003Cpu003E当然,也可以在程序的第一行指定 #!u002Fusru002Fbinu002Fpython -u 然后程序加可执行权限来运行,或者把 export PYTHONUNBUFFERED=1 写到 .bashrc 里去。u003Cu002Fpu003Eu003Cpu003E附:stackoverflow上也有同学遇到类似问题,可以参考一下u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E地址:http:u002Fu002Fstackoverflow.comu002Fquestionsu002F107705u002Fpython-output-bufferingu003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E被采纳的代码:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F6f627764023f488c93f5a99f19fedbf5″ img_width=”411″ img_height=”269″ alt=”python中stdout输出不缓存的设置方法” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:python中stdout输出不缓存的设置方法

主题测试文章,只做测试使用。发布者:敢吻,转转请注明出处:http://www.cxybcw.com/13124.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code