2013-03-31 130 views
3

之前,我有一个python脚本test.py:Python脚本打印使用os.system的输出打印

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

在Linux命令行我执行

python test.py 

返回:

first 
second 

然后执行

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

返回

second 
first 

有关重定向输出是什么让打印语句之前使用os.system调用打印?

回答

3

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

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

查看更多资讯here

编辑:解释缓冲区何时被刷新。

2

的另一种方法,以防止操作系统缓冲是冲洗第一打印之后的输出:

#!/usr/bin/env python 

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

当Python脚本的输出是一个tty,它的输出是行缓冲。当输出是常规文件时,输出将被块缓冲。