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 は、プロセスで使用できる 2 番目の出力ストリームです。通常、プロセスの通常の (「標準」) 出力と混合してはならないエラー メッセージを出力するために使用されますが、その目的で使用しなければならない、またはまったく使用しなければならないというルールはありません。また、無効なコマンドを のcmd引数に渡すPopen()と、コマンドが実際に実行されないため、stderr は使用されません。プロセスからエラー コード (数値) を取得しようとしている場合は、それproc.returncodeが必要です。

于 2013-06-11T21:47:23.550 に答える
0

Works fine for me:

$ 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 に答える