Python脚本在打印前打印os.system的输出

时间:2013-03-31 15:49:36

标签: python linux command-line stdout

我有一个python脚本test.py:

print "first"
import os
os.system("echo second")

在linux命令行上执行

python test.py

返回:

first
second
然后我执行

python test.py > test.out; cat test.out

返回

second
first

如果重定向输出,则会在print语句之前打印os.system调用?

3 个答案:

答案 0 :(得分:3)

当您输出到管道时,Python会缓冲您写入sys.stdout的输出,并在刷新后或溢出后或关闭时(程序退出时)输出。虽然它会缓冲打印调用,但系统调用直接输出到stdout,它们的输出不会被缓冲。这就是为什么你看到这样的优先权。为避免这种情况,请使用python -u

python -u test.py > test.out; cat test.out

查看更多信息here

编辑:有关何时刷新缓冲区的说明。

答案 1 :(得分:2)

防止os缓冲的另一种方法是在第一次打印后刷新输出:

#!/usr/bin/env python

import sys
print "first"
sys.stdout.flush()
import os
os.system("echo second")

答案 2 :(得分:0)

当python脚本的输出是tty时,其输出是行缓冲的。当输出是常规文件时,输出是块缓冲的。