我正在尝试编写一些将测试安装在计算机上的鲍尔的东西。我正在尝试在Python或Shell脚本中进行操作。我都可以,但两者都失败了。我正在使用which
函数,并通过Python中的子过程执行。(也许还有另一种方法是纯粹的python,没有执行bash(?))
python:
if subprocess.call(['which', 'bower']):
print("bower exists at: " + subprocess.call(['which', 'bower']))
else:
print("no bower") //this prints
bash:
if [ which bower ] #also tried if [ which bower == /usr/local/bin/bower]
then
echo "bower installed"
else
echo "no bower"
fi
我想问题是which
没有返回字符串,它只是打印它。如何访问它返回的信息?
您可以使用distutils
的find_executable
函数。如果找不到可执行文件,它将返回None
:
>>> from distutils.spawn import find_executable
>>> find_executable('man')
'/usr/bin/man'
>>> find_executable('noman')
>>>
使用 bash
:
#!/bin/bash
if [[ -x "$(which bower)" ]]; then
echo "bower installed"
else
echo "no bower"
fi
-x
指示您的文件存在并可执行,因此,如果您无法执行该文件,则它将显示"无bower",尽管可以安装它。
bash:
if type bower &>/dev/null
then
echo "bower installed"
else
echo "no bower"
fi
在Bash中,type
使用bash
本身来确定是否可以找到bower
。默认情况下,type
能够找到别名和功能。如果您只想报告成功如果命令是系统上的实际物理文件,请使用-p
选项对type
。
在python中,使用subprocess.check_output():
>>> import subprocess
>>> result=subprocess.check_output(['command', '-v', 'python'])
另外,请勿使用which
。使用command -v program_name
您还需要捕获错误,而不仅仅是检查真相。
,您的片段变为:
import subprocess
try:
result=subprocess.check_output(['command', '-v', 'bower'])
print("bower exists at: %s" % result)
except subprocess.CalledProcessError:
print("no bower")