使用>缓冲的Python打印语句输出重定向

时间:2010-08-18 19:11:19

标签: python linux

我在python中做print语句。我正在执行我的脚本:

python script.py > out.log nohup &

打印报表并未全部显示在out.log中,但程序正在完成。

该行代码位于.sh文件中 我执行./script.sh

执行

更新:日志会获取所有数据,但直到打印出一定数量的行。它似乎是在缓冲输出。

2 个答案:

答案 0 :(得分:24)

当stdout被发送到tty时,它将被行缓冲,并且每行都会被刷新,但是当重定向到文件或管道时,它将被完全缓冲,并且只有在溢出缓冲区时才会定期刷新。

如果您希望输出立即可见,则必须在每行后添加sys.stdout.flush()次调用,或者完全禁用缓冲。请参阅Disable output buffering了解后者的方法:

  
      
  1. 使用-u命令行开关
  2.   
  3. 在每次写入后刷新的对象中包裹sys.stdout
  4.   
  5. 设置PYTHONUNBUFFERED env var
  6.   
  7. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
  8.   

答案 1 :(得分:1)

你有没有尝试过:

  1. 在没有重定向的情况下运行它并确保按预期打印所有内容
  2. 不是通过shell脚本运行它,而只是通过命令行运行它
  3. 这些步骤可以帮助您“回家”解决问题。