国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 在 nohup 中没有打印 以获得更好的体验。

# Python 程序在 nohup 中没有打印

nohup 用于避免终端挂断时程序退出,在运行耗时很长的任务时非常实用。

nohup command &

使用 nohup 运行程序时,它会将 标准输出标准错误 重定向到 nohup.out 中。 可以使用 tail -f nohup.out 命令来实时查看程序输出的信息。

但是如果你使用 nohup 运行的是 Python 的脚本,你会发现 nohup.out 中很久都没有信息显示。

nohup script.py &

这是因为 Python 程序在交互模式下运行时 标准输出标准错误 采用行缓冲,但在非交互模式下 标准输出 使用块缓冲。

  • 块缓冲:存缓冲区满时进行实际 I/O 并清空缓冲区

  • 行缓存:缓冲区满或遇到换行符时进行实际 I/O 并清空缓冲区

因此,需要等待缓冲区写满,进行实际 I/O 后,才能在 nohup.out 中看到来自 标准输出 的信息。

# 解决办法

# 关闭缓冲

Python 通过 -u 选项运行脚本时会关闭缓冲功能,但这样会降低性能。

nohup python -u script.py &

# 手动设置行缓冲

可以使用 sys.stdout.reconfigure 方法手动将 标准输出 设为行缓冲。

import sys
sys.stdout.reconfigure(line_buffering=True)
本文 更新于: 2025-11-27 09:37:58 创建于: 2025-11-27 09:37:58