Cómo usar pexpect en Python

Cómo usar pexpect en Python

En este artículo, aprenderás cómo usar pexpect en Python. Pexpect es una biblioteca de Python para controlar otros programas por medio de la entrada/salida del terminal. Puede ser útil en casos como la configuración de un servidor de manera automatizada o en pruebas de integración para emular la interacción humana con programas de línea de comandos.

Con pexpect, puedes abrir un proceso y controlar su entrada/salida de manera programática. Puedes enviar comandos e interactuar con la salida y errores del proceso en tiempo real. pexpect funciona en todos los sistemas operativos que soportan Python.

📋 Aquí podrás encontrar✍
  1. Instalación
  2. Ejemplos de uso
    1. Ejemplo 1 - Conectarse a un servidor SSH y ejecutar comandos
    2. Ejemplo 2 - Interactuar con un programa CLI
  3. Conclusión
  4. Preguntas frecuentes
    1. ¿Puedo utilizar pexpect en Windows?
    2. ¿Puedo interactuar con un programa que tenga gráficos?
    3. ¿Puedo utilizar pexpect en un servidor remoto?
    4. ¿Cómo puedo enviar señales al proceso siendo monitoreado?

Instalación

Para instalar pexpect, necesitas tener instalado Python. Puedes instalar pexpect en Linux o Unix con el siguiente comando en la terminal:

pip install pexpect

Alternativamente, puedes descargar el archivo fuente de pexpect de la página de descargas de pexpect y luego instalarlo con el siguiente comando:

python setup.py install

Para instalar en Windows, necesitas descargar el archivo .whl de la página de descargas de Python Extension Packages for Windows, navegar a la carpeta de descargas en la terminal y después instalar con el siguiente comando:

pip install pexpect-4.8.0-py2.py3-none-any.whl

Ejemplos de uso

Ejemplo 1 - Conectarse a un servidor SSH y ejecutar comandos

Uno de los casos de uso más comunes para pexpect es conectarse a un servidor SSH y ejecutar comandos automáticamente. En este ejemplo, se muestra cómo conectarse a un servidor SSH y comprobar la respuesta del servidor. En la mayoría de los casos, se usa una conexión SSH para tareas automatizadas.


import pexpect

# Conectar a un servidor SSH y ejecutar el comando 'ls'

ip_address = '123.123.123.123'
username = 'mi_usuario'
password = 'mi_contraseña'

# Utilizamos el comando ssh y las variables de conexión para conectarnos
conexion_ssh = pexpect.spawn(f'ssh {username}@{ip_address}')

# Esperamos a que nos pida la contraseña
i = conexion_ssh.expect([pexpect.TIMEOUT, 'password:', 'Connection refused', pexpect.EOF])

if i == 0: # Si no nos pidió la contraseña y pasaron los segundos de espera
print("No te ha dado tiempo a pedir la contraseña")
elif i == 1: # Si nos pidió la contraseña
# Introducimos la contraseña
conexion_ssh.sendline(password)
# Vemos qué responde el servidor
respuesta_servidor = conexion_ssh.expect(["Last login:", pexpect.EOF])
if respuesta_servidor == 0: # Correctamente conectados
conexion_ssh.sendline("ls") # Muestra el directorio actual
conexion_ssh.expect(".+") # Espera a que se ejecuta el comando
print(conexion_ssh.before) # Imprime la salida recibida por el servidor
elif respuesta_servidor == 1: # El servidor no responde
print("No se ha podido conectar con el servidor")
else: # Ocurrio una excepción
print("error")
print(conexion_ssh.expout)

Ejemplo 2 - Interactuar con un programa CLI

Con pexpect, puedes interactuar con programas CLI (Command Line Interface) de manera programática. Este ejemplo muestra cómo interactuar con un programa CLI ficticio llamado "mi_programa" para crear un archivo y luego eliminarlo.


import pexpect

# crear un archivo
mi_programa = pexpect.spawn('mi_programa')
mi_programa.expect('Digite el nombre del archivo:', timeout=10)
mi_programa.sendline('mi_archivo.txt')
mi_programa.expect(pexpect.EOF)

# verificar que se creó el archivo
ls = pexpect.spawn('ls')
ls.expect('.+')
print(ls.before)

# eliminar el archivo
mi_programa = pexpect.spawn('mi_programa')
mi_programa.expect('Digite el nombre del archivo:', timeout=10)
mi_programa.sendline('mi_archivo.txt')
mi_programa.expect('¿Está seguro que desea eliminar el archivo?', timeout=10)
mi_programa.sendline('s')
mi_programa.expect(pexpect.EOF)

Conclusión

Pexpect es una biblioteca excelente para interactuar con programas CLI. Puedes controlar la ejecución de programas de manera programática y tener un control total sobre su entrada y salida. Puede ser parte de pruebas de integración o usado para automatizar tareas en tu servidor.

¡Prueba pexpect en tus próximos proyectos y descubre lo que puedes lograr con tu Python!

Preguntas frecuentes

¿Puedo utilizar pexpect en Windows?

Sí, pexpect está disponible en Windows. Hay una versión de Windows compatible que se puede descargar desde la página de descargas de Python Extension Packages for Windows.

¿Puedo interactuar con un programa que tenga gráficos?

No, pexpect es una biblioteca de línea de comandos. Por lo tanto, no es adecuada para interactuar con programas que tengan interfaces gráficas de usuario.

¿Puedo utilizar pexpect en un servidor remoto?

Sí, puedes utilizar pexpect en un servidor remoto utilizando una conexión SSH. Debes tener en cuenta que necesitas acceso de administrador para instalar pexpect en el servidor remoto.

¿Cómo puedo enviar señales al proceso siendo monitoreado?

Puedes enviar señales utilizando el método .signal(signal.SIGINT) por ejemplo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir