Shutil.which
Permettez-moi de recommander une option qui n'a pas encore été discutée : une implémentation Python de which
et plus particulièrement shutil.which
. Il a été introduit dans Python 3.3 et est multiplateforme, supportant Linux, Mac et Windows. Il est également disponible dans Python 2.x via quelcraft . Vous pouvez aussi simplement déchirer le code pour which
tout droit sorti de l'usine ici et l'insérer dans votre programme.
def is_tool(name):
"""Check whether `name` is on PATH and marked as executable."""
# from whichcraft import which
from shutil import which
return which(name) is not None
distutils.spawn.find_executable
Une autre option qui a déjà été mentionnée est distutils.spawn.find_executable
.
find_executable
La docstring de l'article est la suivante :
Tente de trouver 'executable' dans les répertoires listés dans 'path'.
Si vous êtes attentif, vous remarquerez que le nom de la fonction est quelque peu trompeur. Contrairement à which
, find_executable
ne vérifie pas réellement que executable
est marqué comme exécutable, seulement qu'il est sur le PATH. Il est donc tout à fait possible (bien que peu probable) que find_executable
indique qu'un programme est disponible alors qu'il ne l'est pas.
Par exemple, supposons que vous ayez un fichier /usr/bin/wget
qui n'est pas marqué comme exécutable. Exécution de wget
à partir du shell entraînera l'erreur suivante : bash : /usr/bin/wget : Permission refusée . which('wget') is not None
retournera Faux, mais find_executable('wget') is not None
retournera Vrai. Vous pouvez probablement vous en sortir en utilisant l'une ou l'autre de ces fonctions, mais il s'agit d'un élément dont il faut être conscient dans le cas de find_executable
.
def is_tool(name):
"""Check whether `name` is on PATH."""
from distutils.spawn import find_executable
return find_executable(name) is not None