You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用nohup保存日志?Raspbian后台Python脚本日志异常求助

问题原因分析
  • Python默认输出缓冲机制:当输出指向文件而非终端时,Python会启用块缓冲模式,只有当缓冲区填满或程序终止时,才会将内容写入文件。这就是前台运行nohup python <script> >> log.txt时,只有终止程序才看到日志的原因。
  • 后台运行(加&)时,nohup结合Python的缓冲机制,导致缓冲区内容未被及时刷新,甚至程序退出前都不会写入文件,所以log.txt为空。
  • sudo和&>>(合并重定向stdout/stderr)不改变Python的缓冲行为,因此无效。
解决建议
  • 方法1:运行Python时禁用缓冲
    使用-u参数强制Python不缓冲stdout和stderr,命令如下:

    nohup python -u <script> >> log.txt &
    

    这个参数会让输出实时写入文件,tail -f log.txt可以立即看到更新。

  • 方法2:在脚本内部手动刷新缓冲区
    如果无法修改启动命令,可在Python脚本中主动刷新输出:

    • Python 3.3+:使用print()的flush参数
      print("日志内容", flush=True)
      
    • 所有Python版本:调用sys.stdout.flush()
      import sys
      print("日志内容")
      sys.stdout.flush()
      
  • 方法3:用stdbuf调整系统缓冲
    通过stdbuf命令强制设置行缓冲,替代Python的缓冲机制:

    nohup stdbuf -oL python <script> >> log.txt &
    

    -oL表示将stdout设置为行缓冲,每输出一行就立即写入文件。

内容的提问来源于stack exchange,提问作者Juanjo Medina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:31:08