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

use*_*814 12 python linux

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

python script.py > out.log nohup &
Run Code Online (Sandbox Code Playgroud)

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

那行代码在.sh我执行的文件中./script.sh

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

Joh*_*ica 25

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

sys.stdout.flush()如果希望输出立即可见,则必须在每行之后添加调用,或者完全禁用缓冲.有关执行后者的方法,请参阅禁用输出缓冲:

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