Sublime Text 3.x自定义构建Python 2.7.x运行输出错乱问题求助
解决Sublime Text 3中Python 2.7自定义构建环境的输出错乱问题
嘿,这个问题我之前踩过一模一样的坑!本质是标准输出(stdout)和标准错误(stderr)的缓冲机制差异搞的鬼。
你看,代码里print 'wow'是往stdout输出的,而assert抛出的异常信息是走stderr通道。在Sublime的构建环境里,stdout是带缓冲的——它会攒够一定内容才一次性输出,而stderr是无缓冲的,有内容就立刻打出来。这就导致了顺序错乱:print的内容还在缓冲里没完全输出,异常的错误信息已经先跑出来了,甚至出现"wo"这种被拆分的半截内容。
给你两个靠谱的解决办法:
办法1:手动刷新输出缓冲
修改代码,在print之后强制刷新stdout,让内容立刻输出:
import sys def a(x): assert x>0,'invalid argument' print 'wow' sys.stdout.flush() # 强制把缓冲里的内容立刻输出 a(2) a(0)
办法2:修改Sublime构建配置
编辑你的Python 2.7自定义构建文件(.sublime-build格式),给Python命令加上-u参数,禁用输出缓冲:
{ "cmd": ["python2.7", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" }
-u参数会让Python的stdout和stderr都变成无缓冲模式,两个流的输出就会严格按照代码执行的顺序显示了。
亲测这两个办法都能解决你遇到的输出错乱问题,选哪个看你更习惯改代码还是改配置~
内容的提问来源于stack exchange,提问作者underflow
相关产品推荐
相关产品推荐

