0

我有一个工具可以返回一些关于我正在运行的机器的信息。在正常的命令行上它会像 -

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

这很好用。现在,当我将其分解并将其包含在我的 python 脚本中时

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

它给我一个错误

subprocess.py在 XYZ 行,
在 _execute_child
raise 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: 

看?第二个正在工作,因为我收到提示输入密码。

于 2012-10-12T01:33:15.720 回答