Es gibt viele verschiedene Bibliotheken, die es ermöglichen, externe Befehle mit Python aufzurufen. Für jede Bibliothek habe ich eine Beschreibung gegeben und ein Beispiel für den Aufruf eines externen Befehls gezeigt. Der Befehl, den ich als Beispiel verwendet habe, lautet ls -l
(alle Dateien auflisten). Wenn Sie mehr über eine der Bibliotheken erfahren möchten, habe ich die Dokumentation für jede von ihnen aufgelistet und verlinkt.
Quellen
Dies sind alle Bibliotheken
Ich hoffe, dies hilft Ihnen bei der Entscheidung, welche Bibliothek Sie verwenden sollten :)
Unterprozess
Mit Subprocess können Sie externe Befehle aufrufen und sie mit ihren Eingabe-/Ausgabe-/Fehlerleitungen (stdin, stdout und stderr) verbinden. Subprocess ist die Standardwahl für die Ausführung von Befehlen, aber manchmal sind andere Module besser.
subprocess.run(["ls", "-l"]) # Run command
subprocess.run(["ls", "-l"], stdout=subprocess.PIPE) # This will run the command and return any output
subprocess.run(shlex.split("ls -l")) # You can also use the shlex library to split the command
os
os wird für "betriebssystemabhängige Funktionen" verwendet. Es kann auch verwendet werden, um externe Befehle aufzurufen mit os.system
y os.popen
(Hinweis: Es gibt auch einen subprocess.popen). os führt immer die Shell aus und ist eine einfache Alternative für Leute, die keine Notwendigkeit haben oder nicht wissen, wie man subprocess.run
.
os.system("ls -l") # Run command
os.popen("ls -l").read() # This will run the command and return any output
sh
sh ist eine Subprozess-Schnittstelle, mit der Sie Programme so aufrufen können, als wären es Funktionen. Dies ist nützlich, wenn Sie einen Befehl mehrmals ausführen möchten.
sh.ls("-l") # Run command normally
ls_cmd = sh.Command("ls") # Save command as a variable
ls_cmd() # Run command as if it were a function
Plumbum
plumbum ist eine Bibliothek für "skriptähnliche" Python-Programme. Sie können Programme wie Funktionen aufrufen wie in sh
. Plumbum ist nützlich, wenn Sie eine Pipeline ohne die Shell betreiben wollen.
ls_cmd = plumbum.local("ls -l") # Get command
ls_cmd() # Run command
erwarten
pexpect ermöglicht es Ihnen, untergeordnete Anwendungen zu starten, sie zu kontrollieren und Muster in ihren Ausgaben zu finden. Dies ist eine bessere Alternative zu subprocess für Befehle, die unter Unix ein tty erwarten.
pexpect.run("ls -l") # Run command as normal
child = pexpect.spawn('scp foo user@example.com:.') # Spawns child application
child.expect('Password:') # When this is the output
child.sendline('mypassword')
Stoff
fabric ist eine Bibliothek für Python 2.5 und 2.7. Sie ermöglicht die Ausführung von lokalen und entfernten Shell-Befehlen. Fabric ist eine einfache Alternative für die Ausführung von Befehlen in einer sicheren Shell (SSH)
fabric.operations.local('ls -l') # Run command as normal
fabric.operations.local('ls -l', capture = True) # Run command and receive output
Abgesandter
envoy ist als "Unterprozess für Menschen" bekannt. Er wird als bequeme Umhüllung des subprocess
Modul.
r = envoy.run("ls -l") # Run command
r.std_out # Get output
Befehle
commands
enthält Wrapper-Funktionen für os.popen
aber es wurde aus Python 3 entfernt, da subprocess
ist eine bessere Alternative.
0 Stimmen
Ich verstehe das nicht, was ist falsch an
import os; os.system('pip list | grep anatome')
? Zumindest kann man damit Piping machen, wie mein Beispiel zeigt. Es ist nicht klar, wie man das mitimport subprocess; subprocess.run(["ls", "-l"])
.