gpt4 book ai didi

python - 如何检查是否在 Python 中启用了输出缓冲

转载 作者:太空狗 更新时间:2023-10-30 01:32:43 26 4
gpt4 key购买 nike

在 Python 中有很多方法可以关闭输出缓冲:Disable output buffering

让我好奇的是,我怎么知道输出缓冲真的已经关闭了?检查它的最好和最简单的方法是什么?

最佳答案

我已经使用 Python 3.8 在 Linux 上测试了标准输出缓冲,发现 Python3 的输出缓冲区可以检测它是否正在终端(“TTY”)上运行,在这种情况下,打印函数的输出会立即显示,否则输出会延迟到缓冲区已满或脚本退出。例如,如果标准输出是通过管道传输的,它将决定它不在 TTY 中。 (抱歉,我不知道 Windows 上会发生什么。)

当然,可以使用“flush=True”打印参数来防止这种输出延迟。也可以通过使用 Python3 的“-u”命令行参数禁用缓冲,或通过设置 shell 环境变量 PYTHONUNBUFFERED=true 来防止,在这种情况下,缓冲区被直接 FileIO 替换。

所有这些都可以在 Python3 中通过像这样查询 sys.stdout.buffer 来检测:

#!/usr/bin/env python3
import sys
print("Name: ", type(sys.stdout.buffer).__name__)
print("TTY? ", sys.stdout.buffer.isatty())

这个脚本在各种条件下的输出是:

$ myscript.py # Displays immediately
Name: BufferedWriter
TTY? True

$ myscript.py | tee # Waits for script exit because of pipe
Name: BufferedWriter
TTY? False

$ python3 -u myscript.py # Displays immediately
Name: FileIO
TTY? True

$ python3 -u myscript.py | tee # Also displays immediately despite pipe
Name: FileIO
TTY? False

编辑:也可以使用以下 shebang 禁用缓冲(假设脚本名称在 shell 命令中没有以“python3”为前缀。)

#!/usr/bin/env -S python3 -u

关于python - 如何检查是否在 Python 中启用了输出缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com