Pitón

Cómo usar pexpect en Python

Cómo usar pexpect en Python

esperar es un módulo de Python popular para realizar diferentes tipos de tareas automatizadas. Diferentes tipos de aplicaciones interactivas como telnet, ssh, ftp, etc., se puede automatizar usando este módulo. Es un módulo Python puro, y no requiere un compilador C o TCL o extensiones Expect como otros esperan módulos. Puede funcionar fácilmente utilizando solo un intérprete de Python.  Este módulo se puede utilizar de dos formas. Una forma es utilizar el correr() función, y otra forma es utilizar Aparecer clase. La correr() La función es fácil de usar que la clase de generación y realiza las tareas automatizadas rápidamente. El comando particular o un programa puede ser ejecutado por el correr() función que devuelve la salida. Esta función se puede utilizar como alternativa a la os.sistema() función. La Aparecer La clase es más poderosa que la correr() función que puede generar un programa hijo, interactuar con él enviando entradas y esperando la respuesta. Este módulo está instalado en python3 por defecto. Las dos formas de utilizar este módulo se han mostrado en este tutorial.

Usando la función run ()

Sintaxis:

La sintaxis del correr() la función se da a continuación.  Tiene muchos argumentos para varios propósitos. Pero los primeros 3 o 4 argumentos se utilizan principalmente. El primer argumento de esta función es obligatorio que toma el comando que esta función ejecutará. Puede devolver múltiples salidas. Si el Withexitstatus El argumento se usa con el Falso valor, solo devolverá la salida del comando.

ejecutar (comando, timeout = 30, withexitstatus = False, events = None, extra_args = None, logfile = None, cwd = None, env = None, ** kwargs)

Ejemplo 1: diferentes usos de la función run ()

Tres usos diferentes del correr() función se ha mostrado en el siguiente script. La 'pwd'la salida del comando se ejecuta en el primer correr() función que mostrará la ruta del directorio de trabajo actual. A continuación, el correr() La función se utiliza para determinar los detalles de un archivo en particular, y el nombre del archivo se tomará del usuario. El tercero correr() La función se utiliza para hacer ssh conexión y recuperar todos los archivos y carpetas de la web carpeta.

# Importar módulo pexpect
importar pexpect
importar sistema operativo
# Ejecutar comando simple
print ("El directorio de trabajo actual: \ n% s"% pexpect.ejecutar ('pwd').decodificar ("utf-8"))
# Recuperar la información de un archivo en particular
filename = input ("Ingrese un nombre de archivo existente:")
# Verifique que el archivo exista o no
si os.camino.existe (nombre de archivo):
salida = pexpect.ejecutar ("ls -l" + nombre de archivo, conxitstatus = 0)
print ("Información de un archivo en particular: \ n% s"% de salida.decodificar ("utf-8"))
demás:
print ("El archivo no existe.")
# Recupere los archivos y la carpeta de un directorio en particular usando el comando ssh
salida = pexpect.ejecutar ("ssh [correo electrónico protegido] 'ls web /'", events = '(?i) contraseña ':' 12345 \ n ')
print ("\ nLa salida del comando ssh: \ n% s"% salida.decodificar ("utf-8"))

Producción

La siguiente salida aparecerá después de ejecutar el script anterior. En la salida, doc1.py ha dado como nombre de archivo, y los detalles de este archivo se han mostrado. A continuación, la lista de todos los archivos del web carpeta ha mostrado el uso ssh conexión.

Usando la clase de generación

La sintaxis de la clase spawn se da a continuación. El constructor de esta clase puede tomar muchos argumentos para muchos propósitos. El primer argumento es obligatorio que llevará el comando para su ejecución.

class spawn __init __ (self, command, args = [], timeout = 30, maxread = 2000, search window size = none, logfile = none, cwd = none, env = none)

Ejemplo 2: uso simple de la clase de generación

El uso simple de la clase spawn se muestra en el siguiente script. La 'fecha'comando se ha ejecutado aquí mediante el uso de la clase spawn. La salida del comando se recuperará creando el objeto de la clase spawn, y la salida se imprimirá en un formato legible por humanos mediante el uso de descodificar() método.

# Importar módulo pexpect
importar pexpect
# Ejecute el comando de fecha usando spawn
niño = pexpect.spawn ('fecha')
# Leer la salida del niño sin generar EOF
niño.esperar.EOF)
# Almacene el texto que espera el patrón de cadena
salida = hijo.antes de
# Imprime la salida
print ("Hoy es:", salida.decodificar ("utf-8"))

Producción

La siguiente salida aparecerá después de ejecutar el script anterior.

Ejemplo-3: leer el contenido del directorio usando una conexión ssh

La creación de una conexión ssh y la lectura de la lista de todos los archivos y carpetas de un directorio en particular se muestran en el siguiente script.  Aquí, la contraseña del usuario definido se tomará del usuario para realizar la conexión ssh utilizando la clase spawn. Si la contraseña proporcionada es incorrecta, la secuencia de comandos se terminará mostrando un mensaje de error.  Si la contraseña proporcionada es correcta, pero el terminal no está definido, el script mostrará el mensaje de éxito de la conexión, enviará el tipo de terminal y definirá el patrón esperado del símbolo del sistema. Si la contraseña es correcta y el terminal está definido, el script mostrará el mensaje de éxito y el símbolo del sistema de shell.

# Importar módulo pexpect
importar pexpect
# Establecer el nombre de usuario para la conexión ssh
nombre de usuario = '[correo electrónico protegido]'
# Toma una contraseña válida del usuario
Contraseña = entrada ("Introduzca la contraseña de inicio de sesión de% s:"% nombre de usuario)
# Ejecute el comando ssh usando spawn
niño = pexpect.spawn ('ssh' + nombre de usuario)
# Espere la contraseña
niño.esperar ('contraseña:')
# Envíe la contraseña tomada del usuario
niño.sendline (contraseña)
# Tres salidas esperadas
i = niño.esperar (['Permiso denegado', 'Tipo de terminal', '[# \ $]'])
# Seré 0 si ssh no puede conectarse
si i == 0:
print ("Permiso denegado por el anfitrión. Incapaz de iniciar sesión")
niño.matar (0)
# Seré 1 si ssh puede conectarse pero el terminal no está configurado
elif i == 1:
print ('Conectado exitosamente.\ nEl tipo de terminal no está configurado.')
niño.línea de envío ('vt100')
niño.esperar ('[# \ $]')
# Seré 2 si ssh puede conectarse y el terminal está configurado
elif i == 2:
print ('Conectado exitosamente.')
prompt = child.después
print ('Símbolo del sistema de Shell:', mensaje.decodificar ("utf-8"))

Producción

La siguiente salida aparecerá cuando el script anterior se ejecute con la contraseña incorrecta.

La siguiente salida aparecerá cuando se ejecute el script anterior con la contraseña correcta.

Conclusión

pexpect es un módulo muy útil para los usuarios de Python que les ayuda a realizar sus tareas habituales automáticamente. Los usos muy básicos del módulo pexpect de Python se han descrito en este tutorial mediante el uso de ejemplos sencillos para ayudar a los usuarios a comenzar a trabajar con este módulo.

Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....