Was ist der Unterschied zwischen subprocess.Popen()
und os.system()
?
python
subprocess
system
Arovit
quelle
quelle
sts = p.wait()
anstelle der letzten Zeile verwenden.shell=True
wenn Sie können. Diese Option ist einer der Vorteilesubprocess.Popen()
und Hilfsfunktionen.os.system
undsubprocess.call/popen/run
blockiert / wartet, bis der Befehl beendet ist: stackoverflow.com/a/14059648/4752883subprocess.Popen()
ist streng super-set vonos.system()
.quelle
os.system
entspricht dem Unix-system
Befehl, währendsubprocess
ein Hilfsmodul erstellt wurde, um vielen der von denPopen
Befehlen bereitgestellten Funktionen eine einfachere und steuerbarere Schnittstelle zu bieten. Diese wurden ähnlich wie der Befehl Unix Popen entworfen .Wohingegen:
Wenn Sie überlegen, welche Sie verwenden
subprocess
möchten, verwenden Sie sie auf jeden Fall, da Sie über alle Ausführungsmöglichkeiten sowie zusätzliche Kontrolle über den Prozess verfügen.quelle
Der Unterprozess basiert auf popen2 und hat als solcher eine Reihe von Vorteilen - es gibt hier eine vollständige Liste im PEP , aber einige sind:
quelle
Wenn Sie Python (cpython) unter Windows
<built-in function system>
ausführen, wird das Betriebssystem unter dem Vorhang _wsystem ausgeführt, während bei Verwendung eines Nicht-Windows- Betriebssystems das System verwendet wird .Im Gegensatz dazu sollte Popen CreateProcess unter Windows und _posixsubprocess.fork_exec in posix-basierten Betriebssystemen verwenden.
Ein wichtiger Ratschlag stammt jedoch aus den Dokumenten von os.system , in denen es heißt:
quelle