我需要從終端得到的結果捕獲來自終端(外部處理)的結果
mask = "audio"
a = os.system("ls -l | grep %s | awk '{ print $9 }'" % mask)
print a # a = 0, that's the exit code
#=>
file1_audio
file2_audio
0
這個命令只是打印結果到控制檯,而我想將它捕捉到一個變量。
我需要從終端得到的結果捕獲來自終端(外部處理)的結果
mask = "audio"
a = os.system("ls -l | grep %s | awk '{ print $9 }'" % mask)
print a # a = 0, that's the exit code
#=>
file1_audio
file2_audio
0
這個命令只是打印結果到控制檯,而我想將它捕捉到一個變量。
使用subprocess
模塊
import subprocess
p = subprocess.Popen("ls -l | grep %s | awk '{ print $9 }'" % mask,
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
的shell=True
的管道由shell中運行是必需的,否則,你得到一個No such file or directory
。
在Python 2.7,你也可以使用
output = subprocess.check_output(
"ls -l | grep %s | awk '{ print $9 }'" % mask
stderr=subprocess.STDOUT,
shell=True)
但我發現它使用麻煩,因爲它拋出一個subprocess.CalledProcessError
如果不是0,並捕獲標準輸出和標準錯誤,你需要將管道返回退出代碼將它們交錯,這使得它在許多情況下不可用。
你在這裏想要做的事情也可以在純Python中完成。 – Keith
@凱斯,這只是一個例子,我有一個更嚴肅的任務。 – Mataba
然後,您可以使用[subprocess](http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline)模塊運行管道並讀取stdout。 – Keith