繁体   English   中英

尽管在python子进程中提供了stderr = PIPE,但仍将输出抛出到外部

[英]Throws output outside, despite giving stderr=PIPE in python subprocess

    str = "blah -l"
    cpuinfo = subprocess.Popen(str.split(),stdout=PIPE,stderr=PIPE)

    tuples = cpuinfo.communicate()

在上面的代码中,当我给出str = [some_valid_command]时,将输出提供给元组。 当我发出无效命令时,我希望该错误将带给PIPE,但仍会在控制台上抛出该错误。...我不太确定,我在哪里理解错了...。

谢谢.....

我不确定您是否看到stderr实际上出现在控制台上,还是只是在运行Python失败时才生成名为“ blah”的进程,该进程是在运行您提供的示例时产生的...

该示例的输出将是Python引发OSError: [Errno 2] No such file or directory ,除非您在PATH中有一个名为“ blah”的可执行脚本,否则这是不希望的。

我做了一个简单的测试,并编写了一个bash脚本,如下所示:

#!/bin/bash

echo "This is stdout"
echo "This is a failure on stderr" >&2
exit 1

在授予该脚本可执行文件权限之后,我重复了您的示例,但这样称呼我的脚本(在本地目录中名为fail.sh):

import subprocess

cmd = './fail.sh'
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate()

按预期返回此结果('This is stdout\\n', 'This is a failure on stderr\\n')

因此,也许您真正在这里看到的是您要调用的任何程序(如果不是这样的话)都根本不存在于PATH中。

还要注意在Python中使用str作为标签的注意事项: str是内置类型,不应用作变量或函数的名称,除非您特别想“重载”内置函数。 string也是一个类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM