我试图写一些能够测试计算机上安装的凉亭的东西。我试图在python或shell脚本中执行此操作。我对其中任何一个都没关系,但两者都失败了。我使用which
函数并通过python中的子进程执行它。 (也许有另一种方法可以做到纯粹的python,没有执行bash(?))
if subprocess.call(['which', 'bower']):
print("bower exists at: " + subprocess.call(['which', 'bower']))
else:
print("no bower") //this prints
if [ which bower ] #also tried if [ which bower == /usr/local/bin/bower]
then
echo "bower installed"
else
echo "no bower"
fi
我想问题是which
没有返回字符串,只是打印它。如何访问它返回的信息?
答案 0 :(得分:2)
您可以使用find_executable
中的distutils
功能。如果找不到可执行文件,它将返回None
:
>>> from distutils.spawn import find_executable
>>> find_executable('man')
'/usr/bin/man'
>>> find_executable('noman')
>>>
答案 1 :(得分:1)
使用bash
:
#!/bin/bash
if [[ -x "$(which bower)" ]]; then
echo "bower installed"
else
echo "no bower"
fi
-x
表示该文件存在且可执行,因此如果该文件不可执行,则它将显示“no bower”,尽管它可能已安装。
答案 2 :(得分:0)
在bash中:
if type bower &>/dev/null
then
echo "bower installed"
else
echo "no bower"
fi
在bash中,type
使用bash
本身来确定是否可以找到bower
。默认情况下,type
能够找到别名和函数。如果您只想在命令是系统上的实际物理文件时报告成功,请使用-p
选项type
。
答案 3 :(得分:0)
在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")