subprocess.stdout的行为与shell = True和shell = False不同

时间:2012-02-04 03:09:31

标签: python subprocess

我有一个名为class.py的python脚本,其中包含一行:

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)

当我用shell = False运行它时,我得到了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)

为什么呢?使用stdout运行子流程时,如何获取shell=True的内容?

谢谢, 凯文

1 个答案:

答案 0 :(得分:5)

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