Tema de contenidos:
- Ejecute un comando simple de Linux
- Ejecutar un comando con datos de entrada
- Ejecutar una secuencia de comandos de Python
- Manejar el error del subproceso
- Devolver el código del subproceso.Popen
- Redirigir la salida del subproceso a archivo
- Multiprocesamiento usando Subprocess.Popen
- Manejar el flujo de entrada y salida s
- Controlar el tiempo de espera y el retraso
- 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óduloimportar 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:
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óduloimportar 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':
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 necesarioimportar 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:
`
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ódulosimportar 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:
El siguiente resultado aparece si el comando 'usr' se toma como entrada que es un comando válido:
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ódulosimportar 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:
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óduloimportar 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:
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 necesariosimportar 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:
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ódulosimportar 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:
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 subprocesoimportar 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:
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óduloimportar 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:
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.