0

実行しているマシンに関する情報を返すツールがあります。通常のコマンドラインでは、次のようになります-

sudo /path-to-tool-directory/tool arg

これは正常に動作します。これを分割して、Pythonスクリプトに次のように含めると、

result = subprocess.call (["sudo /path-to-tool-directory/tool","arg"])

それは私にエラーを投げます

XYZ 行の subprocess.py 、
_execute_child で
child_exception
OSError: [Errno 2] No such file or directoryを発生させます

ここで何がうまくいかないのでしょうか?

4

2 に答える 2

6

subprocess モジュールを使用する場合、call()関数にコマンドライン引数のリストを提供する必要があります。上記の例を取り上げます。

result = subprocess.call (["sudo /path-to-tool-directory/tool","arg"])

"sudo /path-to-tool-directory/tool"は単一のリスト項目であるため、これは機能しません。必要なのは、すべてのアイテムを個別のリスト アイテムにすることです。

result = subprocess.call (["sudo", "/path-to-tool-directory/tool", "arg"])

これは正常に実行され、 sudo からのリターン コードを に残して終了するはずresultです。

于 2012-10-12T05:58:34.723 に答える
0

sudo への呼び出しを分割します (@zzzrik が上記で詳しく説明しているすべての理由により):

>>> result = subprocess.call (["sudo /usr/bin/python","/home/hughdbrown/Dropbox/src/longwords.py"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
>>> result = subprocess.call (["sudo", "/usr/bin/python","/home/hughdbrown/Dropbox/src/longwords.py"])
[sudo] password for hughdbrown: 

見る?2 つ目は、パスワードの入力を求められるため、機能しています。

于 2012-10-12T01:33:15.720 に答える