2010-08-18 79 views
11

我在python中打印语句。我执行我的脚本如下所示:Python打印语句被缓冲>输出重定向

python script.py > out.log nohup & 

打印语句并不都是没有显示在out.log但该计划被整理好。

这行代码是在.sh文件 我做./script.sh

更新执行:日志确实让所有但直到行的某些#的打印数据。它似乎在缓冲输出。

回答

23

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

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

  1. 使用-u命令行开关
  2. sys.stdout在刷新后,每写一个对象
  3. 设置PYTHONUNBUFFERED的环境变量
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
1

你尝试:

  1. 没有重定向运行,并确保一切都如预期
  2. 运行它不是通过shell脚本被打印出来,而只是从一个命令行

这些步骤可能会帮助您“回归”问题。

+0

感谢您的支持 – user420814 2010-08-18 19:18:10

+0

#1和#2都按预期工作 – user420814 2010-08-18 19:24:38