Pregunta Diferencia entre subproceso.Popen y os.system


Cuál es la diferencia entre subprocess.Popen() y os.system()?


76
2018-01-27 06:04


origen


Respuestas:


Si revisas el sección de subproceso de los documentos de Python, notará que hay un ejemplo de cómo reemplazar os.system() con subprocess.Popen():

sts = os.system("mycmd" + " myarg")

... hace lo mismo que ...

sts = Popen("mycmd" + " myarg", shell=True).wait()

El código "mejorado" parece más complicado, pero es mejor porque una vez que lo sabes subprocess.Popen(), no necesitas nada más subprocess.Popen() reemplaza a muchas otras herramientas (os.system() es solo uno de esos) que estaban dispersos en otros tres módulos de Python.

Si te ayuda, piensa en subprocess.Popen() como un muy flexible os.system().


64
2018-01-27 06:56



subprocess.Popen() es un súper conjunto estricto de os.system().


28
2018-01-27 06:17



El subproceso se basa en popen2, y como tal tiene una serie de ventajas: hay una lista completa en el PEP aquí, pero algunos son:

  • usando tubería en el caparazón
  • mejor soporte de nueva línea
  • mejor manejo de excepciones

19
2018-01-27 06:09



os.system es equivalente a Unix sistema comando, mientras que el subproceso fue un módulo auxiliar creado para proporcionar muchas de las facilidades proporcionadas por los comandos Popen con una interfaz más fácil y controlable. Esos fueron diseñados similares a la Unix Popen mando.

system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed

donde como

The popen() function opens a process by creating a pipe, forking, and invoking the shell.

Si estás pensando, cuál usar, entonces usa subproceso definitivamente porque usted tiene todas las facilidades para la ejecución, más control adicional sobre el proceso.


18
2018-01-27 07:07



Al ejecutar python (cpython) en Windows, <built-in function system>  os.system se ejecutará debajo de las cortinas _wsystem mientras que si está usando un sistema operativo que no es de Windows, usará sistema.

Por el contrario, Popen debería usar Proceso de creación en ventanas y _posixsubprocess.fork_exec en sistemas operativos basados ​​en posix.

Dicho esto, un importante consejo proviene de os.system documentos, que dice:

El módulo de subproceso proporciona instalaciones más potentes para el desove   nuevos procesos y recuperación de sus resultados; usando ese módulo es   preferible a usar esta función. Ver el reemplazo de funciones antiguas   con la sección Módulo del subproceso en la documentación del subproceso para   algunas recetas útiles


1
2018-03-09 03:19