子进程库无法正常运行`py setup.py py2exe`命令

时间:2016-01-29 14:36:43

标签: python python-3.x subprocess

我尝试编写一个可以轻松执行python代码的代码。

但是当我使用subprocess库时:

import subprocess
print(subprocess.Popen("py setup.py install", shell = True, stdout = subprocess.PIPE).stdout.read())
print(subprocess.Popen("py setup.py py2exe", shell = True, stdout = subprocess.PIPE).stdout.read())

我看到了这个结果

b''
请帮助我

1 个答案:

答案 0 :(得分:0)

您尝试运行的命令很可能产生stderr,您的代码不会显示。如果您不想单独处理stderr消息,可以将stdout消息发送给import subprocess p = subprocess.Popen("python filedoesntexist", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) print(p.stdout.read())

我将在子进程中使用相对安全的不同命令。我会稍微分解一下,而不是只有一条长线。

stderr=subprocess.STDOUT

看到我添加了参数stdout,这会将所有错误消息发送到subprocess"python filedoesntexist"尝试运行filedoesntexist,因为print是一个不存在的文件,它将b"python: can't open file 'filedoesntexist': [Errno 2] No such file or directory\n" 此消息:

string

但您可能只想获取bytes而不是universal_newlines=True,并且可以像这样添加参数p = subprocess.Popen("python filedoesntexist", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) print(p.stdout.read())

string

现在它只打印python: can't open file 'filedoesntexist': [Errno 2] No such file or directory ,如下所示:

run()

有关其他信息,请访问python documentation

修改

文档建议使用subprocess.run(["python", "filedoesntexist"]) ,可以这样做(在J.F.Sebastian 的评论后更新):

stdout

如果您需要以某种方式处理Popen,请添加前面customTemplate.js示例中描述的参数。