我正在使用python执行一行shell脚本。它不能与which
一起测试自制软件的存在性
#!/usr/bin/python
import sys, subprocess
subprocess.call(["which python"])
抛出长错误
Traceback (most recent call last):
File "installations.py", line 5, in <module>
subprocess.call(["which python"])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 709, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1326, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
但我知道shell执行在某种程度上正常工作
#!/usr/bin/python
import sys, subprocess
subprocess.call(["whoami])
打印我的用户名就好了。我做错了什么,或者出于某种原因不支持。是否有一些更好的支持方式来检测安装的存在?
答案 0 :(得分:4)
失败的调用正试图找到一个名为'which python'的可执行文件,其运行which
的参数为python
。传递给调用的列表(除非设置了shell=True
)是命令列表和所有参数。做
subprocess.call(['which', 'python'])
可能会给你你想要的东西。
答案 1 :(得分:3)
以这种方式调用时,您需要将命令行中的每个单词分隔为可迭代的不同元素:
subprocess.call(["which", "python"])
我高度建议多次阅读docs,以便真正了解启动子流程的所有可能方式以及它们之间的差异。