¿Cuál es la diferencia entre subprocess.Popen()
y os.system()
?
python
subprocess
system
Arovit
fuente
fuente
sts = p.wait()
lugar de la última línea.shell=True
si puede. Tener esta opción es uno de los beneficios desubprocess.Popen()
y sus funciones auxiliares.os.system
ysubprocess.call/popen/run
bloquea / espera a que termine el comando: stackoverflow.com/a/14059648/4752883subprocess.Popen()
es un superconjunto estricto deos.system()
.fuente
os.system
es equivalente alsystem
comando Unix , mientras quesubprocess
era un módulo auxiliar creado para proporcionar muchas de las facilidades proporcionadas por losPopen
comandos con una interfaz más fácil y controlable. Fueron diseñados de manera similar al comando Unix Popen .Mientras:
Si está pensando cuál usar, utilícelo
subprocess
definitivamente porque tiene todas las facilidades para la ejecución, además de un control adicional sobre el proceso.fuente
El subproceso se basa en popen2 y, como tal, tiene una serie de ventajas: aquí hay una lista completa en el PEP , pero algunas son:
fuente
Cuando se ejecuta python (cpython) en Windows,
<built-in function system>
os.system se ejecutará bajo las cortinas _wsystem, mientras que si está utilizando un sistema operativo que no sea Windows, utilizará system .Por el contrario, Popen debería usar CreateProcess en Windows y _posixsubprocess.fork_exec en sistemas operativos basados en posix.
Dicho esto, un consejo importante proviene de os.system docs, que dice:
fuente