
Temas de contenido:
- Ejecute comandos simples de Linux
- Ejecutar un comando usando datos de entrada
- Ejecutar secuencia de comandos de Python
- Manejar errores de procesos secundarios
- Devuelve el código de Subprocess.Popen
- Redirigir la salida de una subrutina a un archivo
- Multiprocesamiento usando Subprocess.Popen
- Manejar flujos de entrada y salidas
- Controlar tiempos de espera y retrasos
- Leer entrada de flujo
Ejecute comandos simples de Linux
El comando «fecha» se utiliza para mostrar la fecha y hora actuales del sistema. Cree un archivo Python usando el siguiente script, que crea un subproceso que ejecuta el comando «fecha» e imprime el resultado del comando:
importar subproceso
#Definir una instrucción para la subrutina
#Utilice la función Popen() para abrir el proceso
producción = subproceso.Poppen([«date»], salida estándar=subproceso.tubería)
#Recuperar resultados y errores comunicándose con el proceso
salida estándar, Error estándar = producción.comunicar()
#Imprimir salida
Imprimir(salida estándar.descodificación())
Producción:
Después de ejecutar el script anterior, aparecerá el siguiente resultado:
Ejecutar un comando usando datos de entrada
El comando «wc» con la opción «-c» se utiliza para contar el número total de caracteres en el valor de cadena proporcionado por el comando. Utilice el siguiente script para crear un archivo Python. El script utiliza la función Popen() para crear un subproceso para ejecutar el comando «wc -c». Después de ejecutar el script, obtenga el valor de la cadena del terminal e imprima el número total de caracteres de la cadena de entrada en la salida.
importar subproceso
#Definir una instrucción para la subrutina
#Utilice la función Popen() para abrir el proceso
producción = subproceso.Poppen([«wc», «-c»], salida estándar=subproceso.tubería)
#Recuperar resultados y errores comunicándose con el proceso
salida estándar, Error estándar = producción.comunicar()
#Imprimir salida
Imprimir(salida estándar.descodificación())
Producción:
Para los valores de entrada de «Ejemplos de subprocesos de Python», se mostrará el siguiente resultado:
Ejecutar secuencia de comandos de Python
Utilice el siguiente script para crear un archivo Python llamado «sum.py» que calcule la suma de dos números proporcionados como argumentos de la línea de comando:
suma
importar sistema
#Calcular el número total de parámetros
norte = Londres(sistema.semen)
#Agregue los dos primeros valores de los parámetros
y = entero(sistema.semen[1]) + entero(sistema.semen[2])
#Imprimir los resultados de la suma
Imprimir(«El número total es» + sistema.semen[1] + » y» + sistema.semen[2] + » Sí», y)
Crear una pitón documento y El siguiente script ejecutará Python documento llamado y.Pitón y Creando dos parámetros subproceso.
#Importar módulo
importar subproceso
#Ejecute el script de Python en el proceso hijo y
#Utilice la función Popen() para abrir el proceso
producción = subproceso.Poppen([«python3», «sum.py», «25», «55»], salida estándar=subproceso.tubería)#Recuperar resultados y errores comunicándose con el proceso
salida estándar, Error estándar = producción.comunicar()
#Imprimir salida
Imprimir(salida estándar.descodificación())
Producción:
Después de ejecutar el script anterior, aparecerá el siguiente resultado:
`
Manejar errores de procesos secundarios
Utilice el siguiente script para crear un archivo Python que utilice un bloque «try-except» para manejar errores en el proceso secundario. Los comandos se obtienen del usuario y los ejecuta el proceso hijo. Si el usuario emite algún comando no válido, se mostrará un mensaje de error.
importar subproceso
importar sistema
#Aceptar comandos de usuario
Orden = ingresar(«Ingrese un comando válido:»)
intentar:
#Utilice la función Popen() para abrir el proceso
producción = subproceso.Poppen([command], salida estándar=subproceso.tubería)
#Recuperar resultados y errores comunicándose con el proceso
salida estándar, Error estándar = producción.comunicar()
#Imprimir salida
Imprimir (salida estándar.descodificación())
Aparte de:
Imprimir («error:», sistema.Excluir mensajes())
Producción:
Si el comando «pwd» se trata como entrada para un comando válido, aparecerá el siguiente resultado:
Si el comando «usr» se considera entrada para un comando válido, aparecerá el siguiente resultado:
Devuelve el código de Subprocess.Popen
Utilice el siguiente script para crear un archivo Python que ejecute el comando «ls» a través de un subproceso para obtener una lista de todos los archivos Python en la ubicación actual. El script espera a que se complete el proceso secundario e imprime el código de retorno.
importar subproceso
importar sistema
#comando de configuración
Orden = [‘ls’, ‘-l’, ‘*.py’]
intentar:
#Utilice la función Popen() para abrir el proceso
producción = subproceso.Poppen(Orden, salida estándar=subproceso.tubería,
Error estándar=subproceso.tubería, texto=real)
#Espera a que se complete el proceso.
Recodificar = producción.esperar()
#Imprimir código de transferencia
Imprimir(«Código de retorno:», Recodificar)
Aparte de:
#Imprimir mensaje de error cuando ocurre un error
Imprimir («error:», sistema.Excluir mensajes())
Producción:
Después de ejecutar el script anterior, aparecerá un resultado similar:
Redirigir la salida de una subrutina a un archivo
Utilice el siguiente script para crear un archivo Python y escribir la salida del subproceso en un archivo de texto. Los comandos ejecutados por el proceso hijo se toman del usuario.
importar subproceso
#Definir nombre de archivo
Nombre del archivo = «Archivo de salida.txt»
#Ejecutar comando ping
instrucción = ingresar(«Ingrese el comando ping:»)
# Según la entrada obtenida por segmentación espacial
parámetro = instrucción.Dividir()
#Escribir la salida del comando en un archivo
y Abierto(Nombre del archivo, 'w') como Datos resultantes:
proceso = subproceso.Poppen(parámetro,salida estándar=Datos resultantes)
#Espera a que se complete el proceso.
código de retorno = proceso.esperar()
Producción:
Según el siguiente resultado, «ping -c 3 www.google.com«El comando se toma del usuario. El comando «cat» se utiliza para mostrar el contenido del archivo escrito por la subrutina:
Multiprocesamiento usando Subprocess.Popen
Utilice el siguiente script para crear un archivo Python que utilice subprocesos para mostrar el uso del multiprocesamiento. Aquí, una función llamada display_msg() se llama varias veces mediante multiprocesamiento.
importar multiprocesamiento
importar subproceso
#Definir funciones que serán llamadas por multiprocesamiento
definición Mostrar mensaje(norte):
#Utilice la función format() para definir instrucciones
instrucción = «echo 'Programación Python'».Formato(norte)
#Utilice la función Popen() para abrir el proceso
proceso = subproceso.Poppen(instrucción, caparazón=real, salida estándar=subproceso.tubería)
#Recuperar resultados y errores comunicándose con el proceso
salida estándar, error = proceso.comunicar()
#Imprimir salida
Imprimir (salida estándar.descodificación())
#Llame a la función 5 veces creando multiprocesamiento.Pool
y Multiprocesamiento.piscina(Multiprocesamiento.recuento de CPU()) como diputado:
#Función de mapeo
MP.mapa(Mostrar mensaje, alcance(1, 5))
Producción:
Después de ejecutar el script anterior, aparecerá el siguiente resultado:
Manejar flujos de entrada y salida
Antes de crear el script Python de este ejemplo, primero cree un archivo de texto llamado «test.txt», que contenga el siguiente contenido.
prueba.txt
Perla
Pitón
intento
PHP
Utilice el siguiente script para crear un archivo Python que utilice un subproceso para leer el contenido del archivo «test.txt» y utilice otro subproceso para buscar palabras específicas en el archivo de texto. Aquí, se busca la palabra «python» en el «archivo test.txt» que contiene la palabra.
importar subproceso
#Definir el proceso del flujo de entrada.
Durante el viaje = subproceso.Poppen([«cat», «test.txt»], salida estándar=subproceso.tubería, texto=Dulú>#Definir el proceso del flujo de salida.
fuera del itinerario = subproceso.Poppen(
[«grep», «python»], entrada estándar=en curso.salida estándar,
salida estándar=subproceso.tubería, texto=real)
#Guardar la salida del programa de entrada y salida.
producción, _ = proceso de salida.comunicar()
#Imprimir salida
Imprimir («Producción:», producción)
Producción:
El siguiente resultado aparece después de ejecutar el script:
Usar temporizadores para controlar procesos secundarios
Utilice el siguiente script para crear un archivo Python que utilice un temporizador para ejecutar comandos a través de un subproceso. Aquí, el bloque «try-except» se usa para iniciar el temporizador y el bloque «finalmente» se usa para cancelar el temporizador.
importar subproceso
#Importar módulo de temporizador
de hilo importar Temporizador
#definir directiva
instrucción = [‘ping’, ‘www.example.com’]
#Iniciar proceso
pag = subproceso.Poppen(
instrucción, salida estándar=subproceso.tubería, Error estándar=subproceso.tubería)
#Definir temporizador
Temporizador = Temporizador(2, lambda proceso: proceso.matar(), [p])
intentar:
#Iniciar cronómetro
Temporizador.comenzar()
#leer salida
salida estándar, _ = pag.comunicar()
#Imprimir salida
Imprimir (salida estándar.descodificación())
Aparte de:
#Imprimir mensaje de error cuando ocurre un error
Imprimir («error:», sistema.Excluir mensajes())
por fin:
#Detener el cronómetro
Temporizador.Cancelar()
Producción:
El siguiente resultado aparece después de ejecutar el script:
Leer entrada de flujo
Cree un archivo Python, use un bucle » while » para leer el contenido generado por el subproceso y almacene el contenido en una variable. El contenido de esta variable se imprimirá más adelante. Aquí, el comando «curl» se utiliza en el proceso hijo. www.google.com URL.
importar subproceso
#definir directiva
instrucción = [«curl», «www.example.com»]
pag = subproceso.Poppen(instrucción, salida estándar=subproceso.tubería,
Error estándar=subproceso.tubería, texto=real>
#Inicializar variables de salida
producción = «»
a pesar de real:
#Leer la salida del proceso línea por línea
porque = pag.salida estándar.linea de lectura()
# Terminar el ciclo cuando finaliza el proceso hijo
si No existir:
descansar
producción = salida+en
#Imprimir la línea
Imprimir (producción)
#Obtenga el código de retorno una vez completado el procesamiento
código de retorno = pag.esperar()
#Imprimir código de transferencia
Imprimir («Código de retorno:», código de retorno)
Producción:
La última parte de los tres resultados se muestra a continuación. El código de retorno después de que se completa el proceso hijo es 0:
en conclusión
Este tutorial utiliza múltiples scripts de Python para demostrar diferentes usos del subproceso de Python.Popen(), lo que ayudará a los usuarios de Python a comprender el uso básico de la función.