[英]Python script prints output of os.system before 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語句之前打印?
當您輸出到管道時,Python會緩沖您寫入sys.stdout
輸出,並在刷新后或溢出后或關閉時(程序退出時)輸出。 雖然它會緩沖打印調用,但系統調用直接輸出到stdout,它們的輸出不會被緩沖。 這就是為什么你看到這樣的優先權。 為避免這種情況,請使用python -u
:
python -u test.py > test.out; cat test.out
在這里查看更多信息。
編輯 :解釋何時刷新緩沖區。
阻止os緩沖的另一種方法是在第一次打印后刷新輸出:
#!/usr/bin/env python
import sys
print "first"
sys.stdout.flush()
import os
os.system("echo second")
當python腳本的輸出是tty時,其輸出是行緩沖的。 當輸出是常規文件時,輸出是塊緩沖的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.