2012-06-12 58 views
0
str = "blah -l" 
    cpuinfo = subprocess.Popen(str.split(),stdout=PIPE,stderr=PIPE) 

    tuples = cpuinfo.communicate() 

在上面的代码中,当我给str = [some_valid_command]给出元组的输出时。当我给一个无效的命令,我预计将要采取的PIPE的错误,但它仍然是扔出去控制台上....我不太清楚,在这里我的理解是错误的....在python子进程中抛出输出stderr = PIPE

谢谢.....

回答

1

我不知道,如果你看到的标准错误居然出现在控制台上,或只运行到Python未能生成一个进程名为“嗒嗒”,这是运行示例时产生您提供...

的例子的输出将是Python的提高的OSError: [Errno 2] No such file or directory,这是可以预料的,除非你有一个名为可执行脚本“嗒嗒”的PATH

我做了一个简单的测试,并写了一个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')

因此,也许你真正看到的是,不管节目你试图调用(如果它不是胡说),根本就不在你的路径中。

此外还有一个关于在Python中使用str作为标签的注释:str是一个内置类型,不应该用作变量或函数的名称,除非您特别要“过载”内置类型,功能。 string也是一样。

相关问题