簡體   English   中英

Python腳本在打印前打印os.system的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM