【问题标题】:subprocess.stdout behaves differently with shell=True and shell=Falsesubprocess.stdout 与 shell=True 和 shell=False 的行为不同
【发布时间】:2012-02-04 11:14:54
【问题描述】:

我有一个名为 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)

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

谢谢, 凯文

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2017-05-19
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      相关资源
      最近更新 更多