Cómo usar Pexpect en Python

Cómo usar Pexpect en Python

pexpect es un módulo de pitón popular para hacer diferentes tipos de tareas automatizadas. Diferentes tipos de aplicaciones interactivas como Telnet, SSH, FTP, etc., se puede automatizar con este módulo. Es un módulo Python puro, y no requiere un compilador C o TCL o espera extensiones como otros esperan módulos. Puede funcionar fácilmente usando un intérprete de Python solo. Este módulo se puede usar de dos maneras. Una forma es usar el correr() función, y otra forma es usar Aparecer clase. El correr() La función es fácil de usar que la clase de desove y realiza las tareas automatizadas rápidamente. El comando en particular o un programa puede ser ejecutado por el correr() función que devuelve la salida. Esta función se puede utilizar como alternativa al sistema operativo.sistema() función. El Aparecer la clase es más poderosa que la correr() función que puede generar un programa infantil, interactuar con él enviando entrada y esperando la respuesta. Este módulo se instala en Python3 de forma predeterminada. Las dos formas de usar 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 diversos fines. Pero los primeros 3 o 4 argumentos se usan 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 Witexitstatus El argumento se usa con el FALSO valor, solo devolverá la salida del comando.

run (comando, timeout = 30, withexitStatus = false, event = 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() la función se ha mostrado en el siguiente script. El 'pwd'La salida del comando se ejecuta en el primero correr() función que mostrará la ruta de 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 de archivo se tomará del usuario. El tercero correr() la función se usa para hacer el ssh conexión y recuperar todos los archivos y carpetas de la web carpeta.

# Importar módulo PEXPECT
importar pexpect
importar sistema operativo
# Ejecutar el comando simple
Imprimir ("El directorio de trabajo actual: \ n %s" %PEXPECT.Run ('PWD').Decode ("UTF-8"))
# Recuperar la información de un archivo en particular
FileName = input ("Ingrese un nombre de archivo existente:")
# Verifique el archivo existe o no
Si OS.camino.existe (nombre de archivo):
salida = PEXPECT.run ("ls -l"+nombre de archivo, withexitStatus = 0)
Imprimir ("Información de un archivo en particular: \ n %s" %de salida.Decode ("UTF-8"))
demás:
imprimir ("El archivo no existe.")
# Recupere los archivos y la carpeta de un directorio en particular usando el comando ssh
salida = PEXPECT.run ("ssh fahmida@localhost 'ls web/'", events = '(?i) Contraseña ':' 12345 \ n ')
imprimir ("\ nthe salida del comando ssh: \ n %s" %de salida.Decode ("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 han demostrado. A continuación, la lista de todos los archivos del web La carpeta ha demostrado usando ssh conexión.

Usando la clase de Spawn

La sintaxis de la clase de desove se da a continuación. El constructor de esta clase puede tomar muchos argumentos para muchos propósitos. El primer argumento es obligatorio que tomará el comando para la 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 desove

El uso simple de la clase de desove se ha mostrado en el siguiente script. El 'fecha'El comando se ha ejecutado aquí usando la clase de desigualidad. La salida del comando se recuperará creando el objeto de la clase de desove, y la salida se imprime en formato legible por humanos utilizando el descodificar() método.

# Importar módulo PEXPECT
importar pexpect
# Ejecute el comando de fecha usando Spawn
Niño = Pexpect.Spawn ('Fecha')
# Lea la salida del niño sin generar EOF
niño.Espere (Pexpect.EOF)
# Almacene el texto que se espera por el patrón de cadena
salida = niño.antes
# Imprime la salida
Imprimir ("Hoy es:", salida.Decode ("UTF-8"))

Producción

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

Ejemplo-3: lea el contenido del directorio usando la conexión SSH

Crear conexión SSH y leer la lista de todos los archivos y carpetas de un directorio en particular se ha mostrado en el siguiente script. Aquí, la contraseña del usuario definido se tomará del usuario para hacer la conexión SSH utilizando la clase de Spawn. Si la contraseña dada es incorrecta, el script se terminará mostrando un mensaje de error. Si la contraseña dada es correcta, pero el terminal no está definido, entonces el script mostrará el mensaje de éxito para 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 se define el terminal, 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 = 'fahmida@localhost'
# Tomar una contraseña válida del usuario
Contraseña = entrada ("Ingrese la contraseña de inicio de sesión de %s:" %de nombre de usuario)
# Ejecutar el comando SSH usando Spawn
Niño = Pexpect.Spawn ('ssh' + nombre de usuario)
# Espera la contraseña
niño.Espere ('contraseña:')
# Enviar la contraseña tomada del usuario
niño.SendLine (contraseña)
# Se esperan tres resultados
i = niño.Espere (['Permiso denegado', 'Tipo terminal', '[#\ $]'])
# Seré 0 si SSH no puede conectarse
Si i == 0:
Imprimir ("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:
imprimir ('conectado con éxito.\ n terminal no está configurado.')
niño.SendLine ('VT100')
niño.Espere ('[#\ $]')
# Seré 2 si SSH puede conectarse y se establece el terminal
Elif i == 2:
imprimir ('conectado con éxito.')
aviso = niño.después
imprimir ('Solicitud del sistema de shell:', indicador.Decode ("UTF-8"))

Producción

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

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

Conclusión

Pexpect es un módulo muy útil para los usuarios de Python que les ayuda a hacer sus tareas regulares automáticamente. Los usos muy básicos del módulo PEXPECT de Python se han descrito en este tutorial utilizando ejemplos fáciles para ayudar a los usuarios a comenzar a trabajar con este módulo.