2012-02-04 75 views
5

我有一個名爲class.py有一行Python腳本:subprocess.stdout與殼= True和外殼不同的行爲=假

class.py:

print "Hello World" 

我在子進程運行, 喜歡這個。

run_subprocess.py:

import subprocess 

p = subprocess.Popen(["python", "class.py"], stdin=subprocess.PIPE, shell=True, 
        stdout=subprocess.PIPE) 
a = p.communicate() 

print a 

當我運行這個(在Mac上),我得到一個空的命令字符串:

$ python run_subprocess.py 
('', None) 

當我運行這個與外殼=假,我得到標準輸出的內容:

run_subprocess.py:

import subprocess 

p = subprocess.Popen(["python", "class.py"], stdin=subprocess.PIPE, shell=False, 
        stdout=subprocess.PIPE) 
a = p.communicate() 

print a 


$ python run_subprocess.py 
('hello world\n', None) 

爲什麼?如何在shell=True上運行子進程時獲得stdout的內容?

謝謝, 凱文

回答

5

Popen第一個參數將被解釋在取決於shell值的不同方式。您需要以不同的方式傳遞命令及其參數。請閱讀文檔(幾天前我回答了similar question)。