使用子进程运行程序时出错

时间:2012-10-12 01:28:28

标签: python python-2.7 subprocess

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

  

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]没有这样的文件或目录

任何线索可能会出错?

2 个答案:

答案 0 :(得分:6)

使用子进程模块时,需要为call()函数提供 list 的命令行参数。以上面的例子为例:

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"])

这应该成功运行并终止,在result中保留sudo的返回码。

答案 1 :(得分: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: 

请参阅?第二个是工作,因为我被提示输入密码。