0

我有代码

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = proc.communicate()

我尝试分配给 cmd 的无效命令,但 stderr 始终为 Null

像 'ls fds' 这样的无效命令返回 'ls: cannot access fds: No such file or directory' 但该消息既没有出现在 stdout 也没有出现在 stderr 中。

4

2 回答 2

0

听起来您可能会混淆 stderr 和进程的返回代码(在proc.returncode您调用后可用proc.communicate())。stderr 是进程可用的第二个输出流。它通常用于打印不应与进程的正常(“标准”)输出混合的错误消息,但没有规定必须将其用于该目的,或者确实必须使用它。如果你将无效的命令传递给 的cmd参数Popen(),那么 stderr 将永远不会被使用,因为实际上没有命令运行。如果您试图从进程中获取错误代码(数值),那么proc.returncode这就是您想要的。

于 2013-06-11T21:47:23.550 回答
0

对我来说很好:

$ python
Python 2.5.1 (r251:54863, May  5 2011, 18:37:34) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> cmd = ['ls', 'fds']
>>> proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
>>> stdout, stderr = proc.communicate()
>>> stdout
''
>>> stderr
'ls: fds: No such file or directory\n'
>>> 
于 2013-06-12T04:15:21.490 回答