从`which`获取返回值以测试目录是否存在

时间:2015-05-05 18:19:16

标签: python bash shell

我试图写一些能够测试计算机上安装的凉亭的东西。我试图在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

击:

if [ which bower ] #also tried if [ which bower == /usr/local/bin/bower]
then
    echo "bower installed"
else
    echo "no bower"
fi

我想问题是which没有返回字符串,只是打印它。如何访问它返回的信息?

4 个答案:

答案 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")