subprocess.stdout与壳= True和外壳不同的行为=假

问题描述:

我有一个名为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的内容?

谢谢, 凯文

Popen第一个参数将被解释在取决于shell值的不同方式。您需要以不同的方式传递命令及其参数。请阅读文档(几天前我回答了similar question)。