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)