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

Kev*_*rke 5 python subprocess

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

class.py:

print "Hello World"
Run Code Online (Sandbox Code Playgroud)

我在子进程中运行它,就像这样.

run_subprocess.py:

import subprocess

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

print a
Run Code Online (Sandbox Code Playgroud)

当我运行它(在Mac上)时,我得到一个空的命令字符串:

$ python run_subprocess.py
('', None)
Run Code Online (Sandbox Code Playgroud)

当我用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)
Run Code Online (Sandbox Code Playgroud)

为什么?如何stdout在运行子进程时获取内容shell=True

谢谢,凯文

Ric*_*nes 5

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