str = "blah -l"
cpuinfo = subprocess.Popen(str.split(),stdout=PIPE,stderr=PIPE)
tuples = cpuinfo.communicate()
在上面的代码中,当我给str = [some_valid_command]给出元组的输出。当我给出一个无效的命令时,我希望错误被带到PIPE,但它仍然在控制台上丢失......我不太确定,在哪里我理解错了......
感谢.....
答案 0 :(得分: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就不存在了。
另外注意在Python中使用str
作为标签:str
是内置类型,不应该用作变量或函数的名称,除非您特别想要“过载“内置功能。同样适用于string
,这是一个类。