He heredado una aplicación de línea de comandos interactiva de 20 años que ya no es compatible con su proveedor. Necesitamos automatizar algunas tareas en esta aplicación.¿Cómo puedo controlar una aplicación interactiva de Unix mediante programación a través de Perl?
El más problemático de estos es la creación de miles de nuevos registros con parámetros ligeramente diferentes (por ejemplo, diferentes identificadores, diferentes nombres). Los registros deben crearse en secuencia, uno a la vez, lo que tomaría muchos meses (y, por lo tanto, dólares) para hacerlo manualmente. En la mayoría de los casos, la creación de un registro tiene un patrón muy predecible de introducción de comandos, lectura de respuestas, introducción de comandos adicionales, etc. Sin embargo, algunas operaciones de creación de registros darán lugar a condiciones de error ('registro con este identificador ya existe') que requieren un conjunto diferente de comandos para salir con gracia.
puedo ver algunas maneras diferentes de hacer esto:
Las canalizaciones con nombre. Escriba una secuencia de comandos Perl que ejecute la aplicación de destino con STDIN y STDOUT en conductos con nombre, luego envíe a la aplicación de destino la secuencia de comandos para crear un registro con los parámetros necesarios y luego instruya a la aplicación de destino para que salga y se cierre. A continuación, ejecutamos el script tantas veces como sea necesario con diferentes parámetros.
Aplicación. Encuentre otra herramienta de Unix que se pueda usar para guiar programas interactivos. Los únicos que he podido encontrar son expect, pero esto no parece mantenerse; y chat, que recuerdo desde hace años, y que parece hacer más o menos lo que quiero, pero parece ser solo para controlar módems.
Una posible complicación más: creo que la aplicación de destino fue escrito para un terminal VT100 y utiliza algún tipo de secuencias de escape para hacer cosas como dar relieve.
Mi pregunta es ¿qué enfoque debo tomar? ¿Uno de estos, o algo completamente diferente? Me gusta bastante la idea de utilizar conductos con nombre y luego tener un script Perl que abre los FIFO y lee y escribe según sea necesario, ya que proporciona mucha flexibilidad, pero por lo que he leído parece que hay muchos problemas potenciales si Voy por este camino.
Gracias de antemano.
espera ahora en sourceforge http://sourceforge.net/projects/expect/ – Mark
Actualización: Tengo las características de una solución usando Expect.pm. Gracias a todos los que respondieron. Puedo SSH al servidor de prueba, iniciar la aplicación y comenzar a interactuar con ella. Parece que los códigos de control VT100 son bastante simples. Actualmente no tengo una cuenta, pero he aprendido algunos nombres de usuario, así que estoy pensando que mi primera prueba de automatización real será un ataque de diccionario en la cuenta demostradora ... –