我正在嘗試編寫一個簡單的Python版本的time
命令行程序,不同之處在於,不是將真實的/ usr/sys時間顯示給shell,而是將其記錄到數據庫中。Python外殼包裝
我目前擁有的是:
wrapper.py
#!/usr/bin/python
import sys
from subprocess import Popen, PIPE
cmd = 'time ' + (' '.join(['"%s"' % v if ' ' in v else v for v in sys.argv[1:]]))
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
print p.stdout.read()
print p.stderr.read()
爲簡單起見,我已經排除了數據庫插入代碼。
然而,爲了說明問題,我使用的測試腳本:
#!/usr/bin/python
import time
for i in xrange(3):
print i
time.sleep(1)
如果我跑wrapper.py python delay.py
,我想看看秒實時打印出來,隨後是這樣的:
real 0m3.057s
user 0m0.030s
sys 0m0.000s
相反,我得到沒有輸出3秒,然後將該被打印:
0
1
2
0.02user 0.00system 0:03.03elapsed 0%CPU (0avgtext+0avgdata 21632maxresident)k
0inputs+0outputs (0major+1514minor)pagefaults 0swaps
如何實時讀取和打印子過程中的輸出?
此外,爲什麼time
的輸出與直接在shell中運行時不同,並且在從Python腳本中的子進程運行時變得混亂?
良好的通話。完美的作品,比我想象的要簡單得多。 – Cerin