从```''测试目录的存在中获取返回值



我正在尝试编写一些将测试安装在计算机上的鲍尔的东西。我正在尝试在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没有返回字符串,它只是打印它。如何访问它返回的信息?

您可以使用distutilsfind_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")

相关内容

  • 没有找到相关文章

最新更新