我有一个工具可以返回有关我正在运行的机器的一些信息。在正常的命令行上它会像 -
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]没有这样的文件或目录
任何线索可能会出错?
答案 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:
请参阅?第二个是工作,因为我被提示输入密码。