2012-02-04 26 views
5

Mam skrypt Pythona o nazwie class.py z jednej linii:subprocess.stdout zachowuje się inaczej ze shell = True i Shell = False

class.py:

print "Hello World" 

go uruchomić w podproces , lubię to.

run_subprocess.py:

import subprocess 

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

print a 

Kiedy uruchomić ten (na komputerze Mac), dostaję pusty ciąg poleceń:

$ python run_subprocess.py 
('', None) 

Kiedy uruchamiam to z powłoki = False, otrzymuję zawartość stdout:

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) 

Dlaczego? Jak mogę uzyskać zawartość stdout podczas wykonywania podprocesu z shell=True?

Dzięki Kevin

Odpowiedz

5

Pierwszym argumentem Popen jest interpretowane w różny sposób w zależności od wartości shell. Musisz przekazać polecenie i jego argumenty w inny sposób. Proszę przeczytać dokumentację (kilka dni temu odpowiedziałem na similar question).