Anders ausgedrückt, gibt es einen plattformübergreifenden Weg zu wissen, welche Datei von subprocess.Popen(file)
ausgeführt wird, ohne sie zuvor auszuführen?Gibt es ein Python-Äquivalent zum Befehl 'which'?
Antwort
Ich glaube, es ist keine in den Python-Bibliotheken
>>> 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 shutil.which()
eine plattformübergreifende Mittel zu entdecken, ausführbare Dateien zur Verfügung zu stellen hinzugefügt:
http://docs.python.org/3.3/library/shutil.html#shutil.which
Rückkehr der Weg zum eine ausführbare Datei, die ausgeführt würde, wenn der angegebene cmd aufgerufen würde. Wenn kein cmd aufgerufen würde, gebe None zurück.
Beispiel Anrufe:
>>> shutil.which("python")
'/usr/local/bin/python'
>>> shutil.which("python")
'C:\\Python33\\python.EXE'
Leider hat dies nicht zu 2.7.x. zurückzuportiert
Python-Quelle für die Version 3.3 von shutil.which ist hier (nur ein paar Dutzend Zeilen): http: // hg .python.org/cpython/file/6860263c05b3/Lib/shutil.py # l1068 – joemaller
Wenn Sie die Zeile 1110 in 'if any ändern ([cmd.lower(). endswith (ext.lower()) für ext in pathext]) '(Drehen Sie den Generator zu einer Liste) als es in Python 2.7 funktioniert. – cdhagmann
Backport hier verfügbar: https://github.com/mbr/shutilwhich –
Eine Option für Python 2 und 3:
from distutils.spawn import find_executable
find_executable('python') # '/usr/bin/python'
find_executable('does_not_exist') # None
find_executable(executable, path=None)
einfach versucht 'ausführbar' in den Verzeichnissen in 'Pfad' aufgelistet zu finden. Der Standardwert ist os.environ['PATH']
, wenn 'Pfad' None
ist. Gibt den vollständigen Pfad zu 'executable' zurück oder None
, falls nicht gefunden.
Beachten Sie, dass im Gegensatz zu which
, find_executable
nicht wirklich überprüft, ob das Ergebnis als ausführbar markiert ist. Sie können os.access(path, os.X_OK)
anrufen, um das selbst zu überprüfen, wenn Sie sicher sein wollen, dass subprocess.Popen
die Datei ausführen kann.
Auch der Hinweis, shutil.which
von Python 3.3+ wurde zurückportiert und für Python 2.6 zur Verfügung gestellt, 2.7 und 3.x über das 3rd-Party-Modul whichcraft.
Es ist verfügbar für die Installation über die oben erwähnte GitHub-Seite (d. H. pip install git+https://github.com/pydanny/whichcraft.git
) oder den Python-Paket-Index (d. H. pip install whichcraft
). Es kann wie solche verwendet werden:
from whichcraft import which
which('wget') # '/usr/bin/wget'
- 1. Gibt es ein Perl-Modul, das ähnlich wie der Unix-Befehl "which" funktioniert?
- 2. Gibt es ein Äquivalent zum Apache "Alias" -Befehl in Django?
- 3. Gibt es ein Äquivalent zum Python-Zweitakt-Befehl in redis?
- 4. Which Python re-Modul zum Übersetzen ein Perl regular expression
- 5. Gibt es einen Befehl zum Löschen des Logcat?
- 6. Python analog von Unix 'which'
- 7. Interaktion zwischen dem Optimierer und Zeichenketten für den Befehl which
- 8. Gibt es ein R, das dem Bash-Befehl mehr entspricht?
- 9. jQuery .keypress & .keydown .which
- 10. Gibt es einen gdb-Befehl, um ein Schleifenkonstrukt zu beenden?
- 11. Gibt es ein Shell-Befehl, der alle Hintergrund Schwanz
- 12. Gibt es in clojure einen Befehl ": bis"?
- 13. TinyMCE triggerSave() -Befehl - gibt es eine Leistungseinbuße?
- 14. Gibt es ein Formularübermittlungsmuster?
- 15. R: `which` Aussage mit mehreren Bedingungen
- 16. Gibt es Alternativen zum WCFTestClient?
- 17. Gibt es ein Tool zum Überprüfen der .NET Framework Version?
- 18. Gibt es ein gutes Werkzeug zum Dokumentieren/Überwachen von Systemtests?
- 19. Gibt es ein Windows/MSVC-Äquivalent zum Flag -rpath Linker?
- 20. Gibt es ein Eclipse-Plugin zum Generieren von Entwurfsmustern?
- 21. Gibt es ein Cmdlet zum Zuordnen von Netzwerklaufwerken?
- 22. Gibt es ein Framework zum Definieren von Parsern in JavaScript?
- 23. Gibt es ein Dienstprogramm zum Aufräumen von VBScript?
- 24. Gibt es ein Perl-Äquivalenzmodul zum pydbg-Modul?
- 25. Gibt es ein Java-Paket zum Erstellen von URLs?
- 26. Gibt es ein Tool zum Neuformatieren von C# -Code?
- 27. Gibt es ein Javadoc-Tag zum Dokumentieren generischer Typparameter?
- 28. Gibt es ein Skript zum Ändern der Größe von SVG?
- 29. Gibt es ein Äquivalent zum Java EE ServletContext in ASP.NET?
- 30. Gibt es ein gutes Werkzeug zum programmatischen Erstellen von Diagrammen?
https://github.com/amoffat/pbs/blob/master/pbs.py#L95 –
standardmäßig subprocess inherents die Umgebung des übergeordneten Prozesses. Für jede ausführbare Datei im PATH (oder dem entsprechenden OS) müssen Sie den Speicherort nicht angeben. –
@JoshLee sieht aus wie PBS ist nicht mehr verfügbar. – Joe