1
Posted on 00:57:00 by Unknown and filed under

  使用 IDLE 运行 Python 程序的时候输出是即时的,但是在命令行下调用 .py 文件的时候,Python 对标准输出默认是有缓冲管理的。也就是说,在程序中尽管 print 试图输出好几行,但是在终端上并没有显示。只有当输出内容足够多的时候才会一起显示。

  之前在配置 Notepad++ 的插件 NppExec 时就遇到了这个问题(见使用 Notepad++ 编辑运行 Python 程序最后一部分)。

  Python 提供一个 -u 参数,使用它可以实现无缓冲的 IO(详细说明可以查看 Python --help)。

  Python 3.0 版本的 -u 参数似乎有一个 bug: Issue4705 (Revision 68451)。安装 3.1 应该就没问题了。

  不过即使使用了 -u 参数,也是指行缓存为 0,每当遇到一个换行符的时候才会输出。如果想在任意地方刷新缓冲区以达到立即输出的目的,需要在 print() 后使用 sys.stdout.flush()。(不知道还有没有更好的方法?)

  这里谈的是标准输出的缓冲,对于其他对象,比如文件,也会涉及到类似的输入输出缓冲的问题。

1
评论 : Python 3 的标准输出缓冲
覃锐 说... 2009年6月22日 06:57

为什么会有缓冲呢?

发表评论