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

    tuples = cpuinfo.communicate()

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

谢谢.....

4

1 回答 1

1

我不确定您是否看到 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 中。

还有一个关于str在 Python 中用作标签的注意事项:str是一种内置类型,不应用作变量或函数的名称,除非您特别想“超载”内置函数。也是如此string,这是一个类。

于 2012-06-12T17:02:56.453 回答