注: 從文檔字符串: 「殼牌:如果爲true,該命令將通過shell執行」
「shell」參數不處理控制檯輸出。這就是說,如果命令(第一個參數)是類型「shell」/「bash」/ etc,類似於「#!/ bin/bash」定義爲腳本文件的第一行。
有幾個選項,以得到執行與「子」的過程輸出:從工藝對象輸出
- 閱讀,「標準輸出」文件類型成員 - 通過使用標準輸出= subprocess.PIPE:
In [2]: proc = subprocess.Popen("ls /tmp/dir1", shell=True,
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
In [3]: proc.poll()
Out[3]: 0
In [4]: proc.stdout
Out[4]: <open file '<fdopen>', mode 'rb' at 0x105e06f60>
In [5]: print proc.stdout.read()
file1
file2
output1
從你自己的文件類型的對象
- 讀輸出 - 從通過自己的文件對象對於s Tdout時:
In [6]: with open("/tmp/dir1/output1", "wt") as stdout_file:
...: proc = subprocess.Popen("ls /tmp/dir1", shell=True, stdout=stdout_file, stderr=subprocess.PIPE)
...: while proc.poll() is None:
...: pass
...:
In [7]: with open("/tmp/dir1/output1", "rt") as stdout_file:
...: print stdout_file.read()
...:
file1
file2
output1
- 使用默認「標準輸出」 - 到控制檯 - 上的「使用os.system」類似輸出。 (大概是什麼傻冒找)
In [8]: proc = subprocess.Popen("ls /tmp/dir1", shell=True)
In [9]: file1 file2 output1
查看文檔字符串爲更多的選擇。