python command which

python graph function



''cual'' funciĆ³n equivalente en Python (8)

( Pregunta similar )

Vea la implementación retorcida: twisted.python.procutils.which

Necesito configurar el entorno ejecutando which abc comando which abc . ¿Hay una función equivalente de Python del comando which ? Este es mi código.

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


Aquí hay una versión de una línea de respuestas anteriores:

import os which = lambda y: next(filter(lambda x: os.path.isfile(x) and os.access(x,os.X_OK),[x+os.path.sep+y for x in os.getenv("PATH").split(os.pathsep)]),None)

utilizado como tal:

>>> which("ls") ''/bin/ls''


Este es el equivalente del comando which, que no solo comprueba si el archivo existe, sino también si es ejecutable:

import os def which(file_name): for path in os.environ["PATH"].split(os.pathsep): full_path = os.path.join(path, file_name) if os.path.exists(full_path) and os.access(full_path, os.X_OK): return full_path return None



No hay un comando para hacer eso, pero puede iterar sobre environ["PATH"] y ver si el archivo existe, que es lo which realmente hace.

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

¡Buena suerte!


Podrías probar algo como lo siguiente:

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


Sé que esta es una pregunta antigua, pero si estás usando Python 3.3+ puedes usar shutil.which(cmd) . Puedes encontrar la documentación here . Tiene la ventaja de estar en la biblioteca estándar.

Un ejemplo sería así:

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


Si usa shell=True , su comando se ejecutará a través del shell del sistema, que automáticamente encontrará el binario en la ruta:

p = subprocess.Popen("abc", stdout=subprocess.PIPE, shell=True)