J'ai hérité d'une application interactive Unix en ligne de commande, qui n'est plus supportée par son éditeur depuis 20 ans. Nous devons automatiser certaines tâches dans cette application.Comment puis-je contrôler une application Unix interactive par programmation via Perl?
Le plus gênant de ceux-ci consiste à créer des milliers de nouveaux enregistrements avec des paramètres légèrement différents (par exemple, des identifiants différents, des noms différents). Les enregistrements doivent être créés en séquence, un à la fois, ce qui prendrait plusieurs mois (et donc des dollars) à faire manuellement. Dans la plupart des cas, la création d'un enregistrement a un modèle très prévisible de saisie des commandes, de lecture des réponses, de saisie de commandes supplémentaires, etc. Cependant, certaines opérations de création d'enregistrements entraînent des conditions d'erreur (enregistrement avec cet identifiant). un ensemble différent de commandes à quitter gracieusement.
je peux voir quelques différentes façons de le faire:
pipes nommés. Ecrivez un script Perl qui exécute l'application cible avec STDIN et STDOUT définis sur des canaux nommés puis envoie à l'application cible la séquence de commandes pour créer un enregistrement avec les paramètres requis, puis demande à l'application cible de quitter et de fermer. Nous exécutons ensuite le script autant de fois que nécessaire avec différents paramètres.
Application. Trouver un autre outil Unix qui peut être utilisé pour scripter des programmes interactifs. Les seuls que j'ai pu trouver sont expect, mais cela ne semble pas être le mieux maintenu; et le chat, dont je me souviens d'il y a très longtemps, et qui semble faire plus ou moins ce que je veux, mais semble être seulement pour contrôler les modems.
Encore une complication potentielle: Je pense que l'application cible a été écrit pour un terminal VT100 et il utilise une sorte de séquences d'échappement pour faire des choses comme fournir souligner.
Ma question est quelle approche dois-je prendre? L'un d'entre eux, ou quelque chose de complètement différent? J'aime bien l'idée d'utiliser des tubes nommés, puis d'avoir un script Perl qui ouvre les FIFO et lit et écrit selon les besoins, car il offre beaucoup de flexibilité, mais d'après ce que j'ai lu, il semble qu'il y ait beaucoup de problèmes potentiels Je descends ce chemin.
Merci d'avance.
s'attendre est maintenant sur sourceforge http://sourceforge.net/projects/expect/ – Mark
Mise à jour: J'ai l'étoffe d'une solution en utilisant Expect.pm. Merci à tous ceux qui ont répondu. Je peux SSH sur le serveur de test, démarrer l'application et commencer à interagir avec elle. On dirait que les codes de contrôle VT100 sont assez simples. Actuellement, je n'ai pas de compte, mais j'ai appris quelques noms d'utilisateur, donc je pense que mon premier vrai test d'automatisation sera une attaque de dictionnaire sur le compte du démonstrateur ... –