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が実際にコンソールに表示されているのか、それとも、提供した例を実行したときに生成される「blah」という名前のプロセスを生成するPythonの失敗に遭遇しただけなのかはわかりません...

OSError: [Errno 2] No such file or directoryこの例の出力は、PATH に「blah」と呼ばれる実行可能スクリプトがない限り、期待される Python の です。

簡単なテストを行い、次のような 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 に存在しないということです。

また、strPython でラベルとして使用する場合の注意:strは組み込み型であり、特に組み込み関数を「オーバーロード」したい場合を除き、変数または関数の名前として使用しないでください。stringクラスであるについても同様です。

于 2012-06-12T17:02:56.453 に答える