Ejemplos de subproceso de Python.Popen

Ejemplos De Subproceso De Python Popen



El subproceso de Python es uno de los módulos útiles que se utiliza para ejecutar diferentes comandos de shell, procesos y ejecutar otro script o archivos ejecutables utilizando el script de Python. También se puede utilizar para redirigir los datos de un proceso a otro y manejar los errores generados por los procesos secundarios. El módulo de subproceso tiene muchas clases que se utilizan para diversos propósitos. La clase “subprocess.Popen” es una de las clases de este módulo que se utiliza para interactuar con los procesos externos y realizar diferentes tipos de tareas entre los procesos. En este tutorial se muestran múltiples usos de la clase “subprocess.Popen” en el script Python.

Tema de contenidos:

  1. Ejecute un comando simple de Linux
  2. Ejecutar un comando con datos de entrada
  3. Ejecutar una secuencia de comandos de Python
  4. Manejar el error del subproceso
  5. Devolver el código del subproceso.Popen
  6. Redirigir la salida del subproceso a archivo
  7. Multiprocesamiento usando Subprocess.Popen
  8. Manejar el flujo de entrada y salida s
  9. Controlar el tiempo de espera y el retraso
  10. Leer una entrada de transmisión

Ejecute un comando simple de Linux

El comando 'fecha' se utiliza para mostrar la fecha y hora actuales del sistema. Cree un archivo Python con el siguiente script que crea un subproceso que ejecuta el comando 'fecha' e imprime el resultado de este comando:

#Importar el módulo

importar subproceso

#Definir un comando para el subproceso y

#abrir proceso usando la función Popen()

producción = subproceso . popen ( [ 'fecha' ] , salida estándar = subproceso . TUBO )

#Recuperar la salida y el error comunicándose con el proceso.

salida estándar , stderr = producción. comunicar ( )

#Imprimir la salida

imprimir ( salida estándar. descodificar ( ) )

Producción:







El siguiente resultado aparece después de ejecutar el script anterior:



  p1



Ve arriba





Ejecutar un comando con datos de entrada

El comando 'wc' con la opción '-c' se utiliza para contar el número total de caracteres del valor de cadena que se proporciona con este comando. Cree un archivo Python con el siguiente script que crea un subproceso con la función Popen() para ejecutar los comandos “wc –c”. El valor de la cadena se toma del terminal después de ejecutar el script y el total de caracteres de la cadena de entrada se imprime en la salida.

#Importar el módulo

importar subproceso

#Definir un comando para el subproceso y

#Abrir proceso usando la función Popen()

producción = subproceso . popen ( [ 'WC' , '-C' ] , salida estándar = subproceso . TUBO )

#Recuperar la salida y el error comunicándose con el proceso.

salida estándar , stderr = producción. comunicar ( )

#Imprimir la salida

imprimir ( salida estándar. descodificar ( ) )

Producción:



Aparece el siguiente resultado para el valor de entrada 'Ejemplos de subprocesos de Python':

Ve arriba

Ejecutar una secuencia de comandos de Python

Cree un archivo Python llamado 'sum.py' con el siguiente script que calcula la suma de dos números y estos números se proporcionan como argumentos de la línea de comandos:

sum.py

#Importar módulo necesario

importar sistema

#Contar el total de argumentos

norte = solo ( sistema . argv )

#Agregue los dos primeros valores de los argumentos

suma = En t ( sistema . argv [ 1 ] ) + En t ( sistema . argv [ 2 ] )

#Imprimir el resultado de la suma

imprimir ( 'La suma de ' + sistema . argv [ 1 ] + ' y ' + sistema . argv [ 2 ] + ' es' , suma )

Crear una pitón archivo con el siguiente script que ejecutará Python archivo llamado suma . py con dos argumentos creando un subproceso .

#Importar el módulo

importar subproceso

#Ejecute el script Python en el subproceso y

#abre el proceso usando la función Popen()

producción = subproceso . popen ( [ 'python3' , 'sum.py' , '25' , '55' ] , salida estándar = subproceso . TUBO ) #Recuperar la salida y el error comunicándose con el proceso.

salida estándar , stderr = producción. comunicar ( )

#Imprimir la salida

imprimir ( salida estándar. descodificar ( ) )

Producción:

El siguiente resultado aparece después de ejecutar el script anterior:

Ve arriba

`

Manejar el error del subproceso

Cree un archivo Python con el siguiente script que maneje los errores del subproceso usando el bloque 'try-except'. Se toma un comando del usuario y el subproceso lo ejecuta. El mensaje de error se muestra si se toma algún comando no válido del usuario.

#Importar los módulos

importar subproceso

importar sistema

#Tomar el mando del usuario

dominio = aporte ( 'Ingrese un comando válido: ' )

intentar :

#Abrir proceso usando la función Popen()

producción = subproceso . popen ( [ dominio ] , salida estándar = subproceso . TUBO )

#Recuperar la salida y el error comunicándose con el proceso.

salida estándar , stderr = producción. comunicar ( )

#Imprimir la salida

imprimir ( salida estándar. descodificar ( ) )

excepto :

imprimir ( 'Error:' , sistema . exc_info ( ) )

Producción:

El siguiente resultado aparece si el comando 'pwd' se toma como entrada que es un comando válido:

  p4-1

El siguiente resultado aparece si el comando 'usr' se toma como entrada que es un comando válido:

  p4-2

Ve arriba

Devolver el código del subproceso.Popen

Cree un archivo Python con el siguiente script que ejecuta un comando 'ls' a través del subproceso para obtener la lista de todos los archivos Python de la ubicación actual. El script espera completar el subproceso e imprime el código de retorno.

#Importar los módulos

importar subproceso

importar sistema

#Establecer el comando

dominio = [ 'yo' , '-l' , '*.py' ]

intentar :

#Abrir proceso usando la función Popen()

producción = subproceso . popen ( dominio , salida estándar = subproceso . TUBO ,

stderr = subproceso . TUBO , texto = Verdadero )

#Espera a completar el proceso

código ret = producción. esperar ( )

#Imprimir el código de retorno

imprimir ( 'Código de retorno:' , código ret )

excepto :

#Imprimir mensaje de error para el error

imprimir ( 'Error:' , sistema . exc_info ( ) )

Producción:

Aparece un resultado similar después de ejecutar el script anterior:

Ve arriba

Redirigir la salida del subproceso a archivo

Cree un archivo Python con el siguiente script que escribe la salida del subproceso en un archivo de texto. El comando que ejecuta el subproceso lo toma el usuario.

#Importar módulo

importar subproceso

#Definir el nombre del archivo

Nombre del archivo = 'archivo de salida.txt'

#Tomar un comando ping

cmd = aporte ( 'Ingrese un comando ping: ' )

#Dividir la entrada tomada según el espacio

argumentos = cmd . dividir ( )

#Escribe la salida del comando en el archivo.

con abierto ( Nombre del archivo , 'En' ) como datos obsoletos:

proceso = subproceso . popen ( argumentos , salida estándar = datos obsoletos )

#Espera a completar el proceso.

código de retorno = proceso. esperar ( )

Producción:

Según el siguiente resultado, el comando “ping -c 3 www.google.com El comando 'se toma del usuario y el comando 'cat' se usa para mostrar el contenido del archivo escrito por el subproceso:

Ve arriba

Multiprocesamiento usando Subprocess.Popen

Cree un archivo Python con el siguiente script donde se muestra el uso del multiprocesamiento mediante subproceso. Aquí, una función llamada display_msg() se llama varias veces mediante multiprocesamiento.

#Importar módulos necesarios

importar multiprocesamiento

importar subproceso

#Definir la función que será llamada por multiprocesamiento

definición mostrar_msg ( norte ) :

#Definir el comando con la función format()

cmd = 'echo 'Programación Python'' . formato ( norte )

#Abrir proceso usando la función Popen()

proceso = subproceso . popen ( cmd , caparazón = Verdadero , salida estándar = subproceso . TUBO )

#Recuperar la salida y el error comunicándose con el proceso.

salida estándar , error = proceso. comunicar ( )

#Imprimir la salida

imprimir ( salida estándar. descodificar ( ) )

#Llame a la función 5 veces creando el multiprocesamiento.Pool

con multiprocesamiento. Piscina ( multiprocesamiento. recuento_cpu ( ) ) como diputado:

#Mapa la función

MP. mapa ( mostrar_msg , rango ( 1 , 5 ) )

Producción:

El siguiente resultado aparece después de ejecutar el script anterior:

Ve arriba

Manejar los flujos de entrada y salida

Cree un archivo de texto llamado 'test.txt' con el siguiente contenido antes de crear el script Python de este ejemplo.

prueba.txt

Perla

pitón

intento

PHP

Cree un archivo Python con el siguiente script que utiliza un subproceso para leer el contenido del archivo 'test.txt' y otro subproceso para buscar una palabra en particular en ese archivo de texto. Aquí, se busca la palabra 'python' en el 'archivo test.txt' que contiene esta palabra.

#Importar módulos

importar subproceso

#Definir un proceso para el flujo de entrada

en proceso = subproceso . popen ( [ 'gato' , 'prueba.txt' ] , salida estándar = subproceso . TUBO , texto = Truco > #Definir un proceso para el flujo de salida

proceso_salida = subproceso . popen (

[ 'agarre' , 'pitón' ] , entrada estándar = en proceso. salida estándar ,

salida estándar = subproceso . TUBO , texto = Verdadero )

#Almacenar la salida de los procesos de entrada y salida.

producción , _ = proceso_fuera. comunicar ( )

#Imprimir la salida

imprimir ( 'Producción:' , producción )

Producción:

El siguiente resultado aparece después de ejecutar el script:

Ve arriba

Controlar el subproceso mediante un temporizador

Cree un archivo Python con el siguiente script que usa un temporizador para ejecutar un comando usando un subproceso. Aquí, el bloque 'try-except' se usa para iniciar el temporizador y el bloque 'finalmente' se usa para cancelar el temporizador.

#Importar el módulo de subproceso

importar subproceso

#Importar el módulo Temporizador

de enhebrar importar Temporizador

#Definir el comando

cmd = [ 'silbido' , 'www.example.com' ]

#Abrir el proceso

pag = subproceso . popen (

cmd , salida estándar = subproceso . TUBO , stderr = subproceso . TUBO )

#Definir el temporizador

Temporizador = Temporizador ( 2 , lambda proceso: proceso. matar ( ) , [ pag ] )

intentar :

#Iniciar el cronómetro

Temporizador. comenzar ( )

#Leer salida

salida estándar , _ = pag. comunicar ( )

#Imprimir salida

imprimir ( salida estándar. descodificar ( ) )

excepto :

#Imprimir mensaje de error para el error

imprimir ( 'Error:' , sistema . exc_info ( ) )

finalmente :

#Detener el cronómetro

Temporizador. Cancelar ( )

Producción:

El siguiente resultado aparece después de ejecutar el script:

Ve arriba

Leer la entrada de transmisión

Cree un archivo Python que lea el contenido de la salida del subproceso usando un bucle ' while ' y almacene el contenido en una variable. El contenido de esta variable se imprime más adelante. Aquí, el comando 'curl' se utiliza en el subproceso para la www.google.com URL.

#Importar módulo

importar subproceso

#Definir comando

cmd = [ 'rizo' , 'www.example.com' ]

pag = subproceso . popen ( cmd , salida estándar = subproceso . TUBO ,

stderr = subproceso . TUBO , texto = Verdadero >

#Inicializar la variable de salida

producción = ''

mientras Verdadero :

#Leer el resultado del proceso línea por línea

en = pag. salida estándar . línea de lectura ( )

#Terminar del bucle cuando finaliza el subproceso

si no En:

romper

producción = salida + en

#Imprimir la línea

imprimir ( producción )

#Obtener el código de retorno después de finalizar el proceso

código de retorno = pag. esperar ( )

#Imprimir el código de retorno

imprimir ( 'Código de retorno: ' , código de retorno )

Producción:

La última parte de las tres salidas se muestra en la siguiente imagen. El código de retorno después de completar el subproceso es 0:

Ve arriba

Conclusión

En este tutorial se muestran diferentes usos del subproceso de Python.Popen() utilizando múltiples scripts de Python que ayudarán a los usuarios de Python a conocer los usos básicos de esta función.