Python sys.stderr刷新频率

Bri*_*ian 7 python buffer flush stderr

sys.stderr多久刷新一次缓冲区,这是不同环境中的标准?

>>> import sys
>>> sys.__stderr__
<open file '<stderr>', mode 'w' at 0x2b4fcb7ac270>
Run Code Online (Sandbox Code Playgroud)

我看到它只是一个标准的文件类型,但我不知道它应该是什么缓冲值.dir()似乎也没有产生任何有用的信息.

jfs*_*jfs 5

更新sys.stderr从 Python 3.9 开始默认是行缓冲的。如果设置了python接收-u命令行选项或$PYTHONUNBUFFERED环境变量,则 stdout 和 stderr 流将被强制不缓冲(包括自 Python 3.7 起的文本层)。


旧答案:

在 Python 2 上,我找不到文档中sys.stderr指定缓冲的位置。stderr我期望与 C 中无缓冲的 行为相同 (Windows 除外),并且我不知道 c99 标准是否强制要求它。标准错误流在 POSIX 中未完全缓冲。选项强制标准流在 Python 2 中-u不被缓冲。

在 Python 3 上

交互时,标准流是行缓冲的。否则,它们像常规文本文件一样被块缓冲。-u您可以使用命令行选项覆盖该值。

-u命令行选项

强制 stdout 和 stderr 流(可作为其buffer属性)的二进制层不被缓冲。如果写入控制台,文本 I/O 层仍将是行缓冲的;如果重定向到非交互式文件,则文本 I/O 层仍将是块缓冲的。