执行shell脚本时出现Python错误

时间:2015-05-05 16:39:32

标签: python shell subprocess

我正在使用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]) 

打印我的用户名就好了。我做错了什么,或者出于某种原因不支持。是否有一些更好的支持方式来检测安装的存在?

2 个答案:

答案 0 :(得分:4)

失败的调用正试图找到一个名为'which python'的可执行文件,其运行which的参数为python。传递给调用的列表(除非设置了shell=True)是命令列表和所有参数。做

subprocess.call(['which', 'python'])

可能会给你你想要的东西。

答案 1 :(得分:3)

以这种方式调用时,您需要将命令行中的每个单词分隔为可迭代的不同元素:

subprocess.call(["which", "python"])

高度建议多次阅读docs,以便真正了解启动子流程的所有可能方式以及它们之间的差异。