我有一个 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
重定向输出如何使 os.system 调用 print 在 print 语句之前?
我有一个 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
重定向输出如何使 os.system 调用 print 在 print 语句之前?
当您输出到管道时,Python 会缓冲您写入的sys.stdout
输出,并在刷新后、溢出后或关闭时(程序退出时)输出。虽然它会缓冲打印调用,但系统调用直接输出到标准输出,并且它们的输出不会被缓冲。这就是为什么你会看到这样的优先级。为避免这种情况,请使用python -u
:
python -u test.py > test.out; cat test.out
在此处查看更多信息。
编辑:解释何时刷新缓冲区。
防止操作系统缓冲的另一种方法是在第一次打印后刷新输出:
#!/usr/bin/env python
import sys
print "first"
sys.stdout.flush()
import os
os.system("echo second")
当 python 脚本的输出是 tty 时,它的输出是行缓冲的。当输出是常规文件时,输出是块缓冲的。