Un subproceso es una parte de un proceso que se ejecuta como si fuera un proceso completo. Son usados para dividir procesos en unidades mas pequeñas
El módulo subprocess (subproceso) de python permite iniciar aplicaciones o procesos distintos durante la ejecución de un programa.
Iniciar un proceso en Python:
Se puede iniciar un proceso en Python utilizando la función Popen. El siguiente programa iniciará ‘ping‘ de Unix y pasará como parámetro el segundo argumento. Es equivalente a ejecutar ‘ping 8.8.8.8‘. Popen se puede utilizar para iniciar cualquier programa con cualquier parámetro.
from subprocess import Popen, PIPE process = Popen(['ping', '8.8.8.8'], stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() print stdout
Popen está definido de la siguiente forma:
Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
‘args’ es el parámetro que recibe el nombre del proceso a ser ejecutado y el argumento que se le pasa a dicho proceso. Puede ser una secuencia ordenada de argumentos o un string. El resto de parámetros modifican el comportamiento del proceso. Los valores que aparecen en la definición son los valores estándar de cada parámetro.
process.communicate() lee la entrada y la salida del proceso. stdout es la salida estándar del proceso. stderr es la salida estándar de errores, y será usada solo si ocurre un error. Si se quiere esperar que el proceso termine, se utiliza Popen.wait().
subprocess.call() en Python:
subprocess.call() puede ser usado para iniciar programas. Recibe como primer parámetro el nombre del programa que será ejecutado. Está definido de la siguiente forma:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) # Se ejecuta el programa especificado en 'args', espera que este termine # y luego devuelve el atributo 'returncode'
En el siguiente ejemplo, el comando ejecutado sería ‘cd /home/user’:
import subprocess
rolex datejust m126284rbr 0006 ladies rolex calibre 2836 2813 automatic hands and markers bought on the streets in new york city. 1:1 replication high end luxury rolex 69173 fake discount online sale.
subprocess.call([‘cd’,’/home/user’])
Guardar la salida del proceso (stdout) en Python:
La salida de la ejecución de un programa se puede guardar directamente en un string utilizando check_output. El método está definido de la siguiente forma:
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False) # Ejecuta el programa especificado en 'args' y devuelve su salida como un 'byte string'
Las computadoras solo pueden almacenar bytes. Un ‘byte string’ es un string convertido a una cadena de bytes (codificado). mp3, wav, jpeg, utf-8, son tipos de codificaciones, las cuales funcionan para representar sonidos, imágenes, textos en cadenas de bytes o ‘bytes strings’.
Ejemplo de uso de check_output:
import subprocess s = subprocess.check_output(["echo", "Hola mundo!"]) print("s = " + s)
Y su salida sería:
s = Hola mundo!