88 votes

Comment puis-je trouver le chemin d'un exécutable ?

J'ai besoin de configurer l'environnement avec le chemin vers un binaire. Dans le shell, je peux utiliser which pour trouver le chemin. Y a-t-il un équivalent en python ? C'est mon code.

cmd = ["which","abc"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
res = p.stdout.readlines()
if len(res) == 0: return False
return True

95voto

Rafael Reiter Points 645

88voto

iLoveTux Points 1705

Je sais que c'est une question plus ancienne, mais si vous utilisez Python 3.3+, vous pouvez utiliser shutil.which(cmd). Vous pouvez trouver la documentation ici. Il a l'avantage d'être dans la bibliothèque standard.

Un exemple serait le suivant :

>>> import shutil
>>> shutil.which("bash")
'/usr/bin/bash'

14voto

Gonzalo Larralde Points 2180

Il n'y a pas de commande pour faire cela, mais vous pouvez répéter plus de environ["PATH"] et regarder si le fichier existe, ce qui est en fait ce que which fait.

import os

def which(file):
    for path in os.environ["PATH"].split(os.pathsep):
        if os.path.exists(os.path.join(path, file)):
                return os.path.join(path, file)

    return None

Bonne chance !

9voto

orip Points 28225

(Question similaire)

Voir l'implémentation Twisted : twisted.python.procutils.which

4voto

Vous pouvez essayer quelque chose comme ceci :

import os
import os.path
def which(filename):
    """docstring for which"""
    locations = os.environ.get("PATH").split(os.pathsep)
    candidates = []
    for location in locations:
        candidate = os.path.join(location, filename)
        if os.path.isfile(candidate):
            candidates.append(candidate)
    return candidates

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X