我試圖在python中運行並讀取time
命令的輸出。問題是,time
命令的工作方式不同的/bin/sh
和/bin/bash
像這樣:如何在使用`subprocess.check_output`時正確引用python中的bash命令?
sh $ time ls
..
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3856maxresident)k
0inputs+0outputs (0major+305minor)pagefaults 0swaps
和/bin/bash
版本是:
bash $ time ls
..
real 0m0.003s
user 0m0.000s
sys 0m0.000s
我需要後者,因爲它比以前更精確。
因此我想在check_output
bash -c '<command>'
包裹的命令,但它給了我一個錯誤,例如:
>>> s.check_output(["bash", "-c", "'time ls'"])
bash: time ls: command not found
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 544, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['bash', '-c', "'time ls'"]' returned non-zero exit status 127
當我排除多餘的報價,輸出不捕獲計時信息:
>>> s.check_output(['bash', '-c', 'time ls'])
real 0m0.002s
user 0m0.000s
sys 0m0.000s
'..'
而最後,當我用executable
參數,而不是包裝,輸出沒有捕獲任何:
>>> s.check_output(['time', 'ls'], shell=True, executable='/bin/bash')
real 0m0.000s
user 0m0.000s
sys 0m0.000s
我該怎麼做?