Dicho de otra manera, ¿existe una forma multiplataforma de saber qué archivo se ejecutará por subprocess.Popen(file)
sin primero haberlo ejecutado?¿Existe un Python equivalente al comando 'which'
Respuesta
creo que no hay ninguno en las bibliotecas de Python
>>> def which(pgm):
path=os.getenv('PATH')
for p in path.split(os.path.pathsep):
p=os.path.join(p,pgm)
if os.path.exists(p) and os.access(p,os.X_OK):
return p
>>> os.which=which
>>> os.which('ls.exe')
'C:\\GNUwin32\\bin\\ls.exe'
Python 3.3 añadió shutil.which()
para proporcionar un medio multiplataforma de archivos ejecutables que descubren:
http://docs.python.org/3.3/library/shutil.html#shutil.which
devuelve la ruta hasta un ejecutable que se ejecutaría si se llamara el cmd dado. Si no se llamará a ningún cmd, devuelva None.
llamadas muestra:
>>> shutil.which("python")
'/usr/local/bin/python'
>>> shutil.which("python")
'C:\\Python33\\python.EXE'
Desafortunadamente, esto no ha sido portado a 2.7.x.
Fuente de Python para la implementación de la versión 3.3 de shutil.which (solo unas pocas docenas de líneas): http: // hg .python.org/cpython/file/6860263c05b3/Lib/shutil.py # l1068 – joemaller
si cambia la línea 1110 a 'if any ([cmd.lower(). endswith (ext.lower()) para ext en pathext]) '(ponga el generador en una lista) de lo que funcionará en Python 2.7. – cdhagmann
Backport disponible aquí: https://github.com/mbr/shutilwhich –
Una opción para Python 2 y 3:
from distutils.spawn import find_executable
find_executable('python') # '/usr/bin/python'
find_executable('does_not_exist') # None
find_executable(executable, path=None)
simplemente trata de encontrar 'ejecutable' en los directorios listados en 'camino'. El valor predeterminado es os.environ['PATH']
si 'ruta' es None
. Devuelve la ruta completa a 'ejecutable' o None
si no se encuentra.
Tenga en cuenta que a diferencia de which
, find_executable
en realidad no verifica que el resultado esté marcado como ejecutable. Es posible que desee llamar al os.access(path, os.X_OK)
para verificarlo por su cuenta si quiere estar seguro de que subprocess.Popen
podrá ejecutar el archivo.
También hay que resaltar, shutil.which
de Python 3.3+ se ha portado y puesto a disposición para Python 2.6, 2.7, 3.x a través del módulo 3 ª parte whichcraft.
Está disponible para su instalación a través de la página mencionada de GitHub (es decir, pip install git+https://github.com/pydanny/whichcraft.git
) o el índice del paquete Python (es decir, pip install whichcraft
). Se puede utilizar como tales:
from whichcraft import which
which('wget') # '/usr/bin/wget'
- 1. ¿Hay un python equivalente al comando `which` de Unix?
- 2. Equivalente al comando * Nix 'which' en Powershell?
- 3. unix comando equivalente "which java" en windows?
- 4. Equivalente al comando "whos" en Python Numpy
- 5. ¿Cuál es el equivalente cmd/powershell de `which` en bash?
- 6. R equivalente al comando `compress` de Stata?
- 7. ¿Hay un módulo Perl que funcione de manera similar al comando "which" de Unix?
- 8. ¿Existe un equivalente al comando Rails/característica "rutas de rake" para Grails?
- 9. ¿Hay un Vim equivalente al comando "fold" de Linux/Unix?
- 10. Subversion equivalente al comando 'show' de Git?
- 11. Pyramid equivalente al comando syncdb de Django?
- 12. Equivalente al comando C# 'as' en C++?
- 13. ¿Existe un javascript equivalente para descomprimir secuencias como en python?
- 14. ¿Existe un equivalente de InnerText en BeautifulSoup/python?
- 15. rsync equivalente comando mv
- 16. Existe un NetBeans equivalente al Espacio de trabajo de Eclipse
- 17. ¿Existe una biblioteca java equivalente al comando de archivo en Unix
- 18. jQuery .keypress & .keydown .which
- 19. Ruby equivalente al "dir" de Python?
- 20. ¿Equivalente Java al getattr de python?
- 21. Windows equivalente al comando "abrir" de Mac OS X
- 22. Mac OS X equivalente al comando de Linux flock (1)
- 23. Linux equivalente al comando "abrir" de Mac OS X
- 24. Python equivalente al BitSet de Java
- 25. ¿Hay un python equivalente al módulo arrancador de perl?
- 26. ¿Hay un equivalente al urllib de python en c/C++?
- 27. ¿Existe un ClientScriptManager.RegisterClientScriptInclude equivalente para CSS
- 28. ¿Existe un equivalente no global de perlbrew?
- 29. ¿Existe un equivalente elegante para Mac?
- 30. ¿Existe un .Net equivalente a java.util.concurrent.Executor?
https://github.com/amoffat/pbs/blob/master/pbs.py#L95 –
Por defecto, el subproceso inherents el entorno del proceso padre. Por lo tanto, para cualquier ejecutable en el PATH (o el SO en el equivalente de la pregunta) no es necesario que especifique la ubicación. –
@JoshLee parece que PBS ya no está disponible. – Joe