我有一个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调用?
答案 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时,其输出是行缓冲的。当输出是常规文件时,输出是块缓冲的。