Aller au contenu
Wikipédia l'encyclopédie libre

Programmed Dialogue with Interactive Programs

Un article de Wikipédia, l'encyclopédie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne cite pas suffisamment ses sources ().

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section «Notes et références».

En pratique: Quelles sources sont attendues? Comment ajouter mes sources?

PDIP est le sigle de Programmed Dialogue with Interactive Programs («Dialogue programmé avec des programmes interactifs», tiré des premières lignes du manuel d'Expect).

C'est une version simplifiée de l’utilitaire expect. Comme lui, PDIP interprète un script de commandes pour dialoguer avec un programme interactif[1] comme le ferait un opérateur humain. Mais il n’a pas toutes les possibilités de expect qui est capable d'interagir avec plusieurs programmes en même temps, d'accepter un langage de commandes de haut niveau offrant les branchements et des structures de contrôle de haut niveau et de redonner le contrôle à l’opérateur en cours de session.

PDIP accepte un langage très simple en entrée pour fournir des fonctions de base :

  • Filtrage de la sortie du programme pour se caler sur une chaîne de caractères se conformant à un modèle
  • Envoi de chaînes de caractères au programme
  • Arrêt des interactions avec le programme pendant une durée donnée en secondes

PDIP est disponible en logiciel libre sur sourceforge[2] .

La ligne de commandes de PDIP se présente comme suit :

 pdip [-s cmdfile] [-b buffer-size] [-dhV] -- commande [param1 param2...]
La commande à lancer avec ses options et paramètres est spécifiée à la fin de la ligne de commande.
Si des options sont passées à pdip et/ou à la commande, alors la commande doit être précédée d’un double
tiret (--). Sinon les options seront toutes passées à pdip et entraîneront des erreurs.


PDIP lit cmdfile ou son entrée standard (défaut) et accepte les commandes suivantes :

 #... # et les mots suivants jusqu’à la fin de la ligne sont ignorés (utilisé pour les commentaires)
 timeout x
 Positionne à x secondes le temps maximum à attendre après chacune des commandes qui suivent (la
 valeur 0 annule le temporisateur, c’est le comportement par défaut)
 recv "w1 w2..."
 Attend une ligne venant du programme se conformant au modèle w1 w2... Le modèle est une expression
 régulière se conformant à regex.
 send "w1 w2..."
 Envoie la chaîne de caractères w1 w2... au programme. La chaîne peut contenir les caractères de
 contrôle suivants:
 \a Cloche
 \b Retour arrière
 \t Tabulation horizontale
 \n Retour à la ligne
 \v Tabulation verticale
 \f Saut de page
 \r Retour chariot
 \" Guillemet
 \\ Barre oblique inversée
 sleep x
 Arrête toute activité pendant x secondes
 exit Termine PDIP


Les options passées au programme sont :

 -b buffer-size | --bufsz=buffer-size
 Taille en octet du buffer interne (par défaut : 512).
 -d | --debug
 Active le mode mise au point. C’est très utile pour comprendre pourquoi un script ne marche pas comme souhaité.
 -h | --help
 Affiche l’aide de la commande (sous-ensemble de cette page de manuel).
 -s cmdfile | --script=cmdfile
 Script de commandes en entrée (défaut : stdin).
 -V | --version
 Affiche la version du logiciel.

Voici quelques exemples d'utilisation :

L’exemple suivant montre la mise en œuvre d’une connexion telnet vers un hôte appelé ’remote’ sur le port 34570 avec le nom de login ’foo’ et le mot de passe ’bar’. Comme le numéro de port distant est spécifié à l’aide d’une option (-p), il faut faire précéder la commande d’un double tiret (--). Les commandes sont injectées sur l’entrée standard. On attend le prompt ’$’ et on lance la commande ls avant de se déconnecter du shell via la commande exit.

 $ pdip -- telnet -p 34570 remote
 recv "login"
 send "foo\n" # Nom de login ’foo’
 recv "Password"
 send "bar\n" # Mot de passe ’bar’
 recv "\$ " # Inhibition du caractère spécial ’$’ avec ’\’
 send "ls\n" # Lance la commande ’ls’
 recv "\$ "
 send "exit\n" # Sortie du shell
 exit # Sortie de PDIP
 $

L’exemple suivant montre la mise en œuvre d’une connexion telnet vers un hôte appelé ’remote’ avec le nom de login ’foo’ et le mot de passe ’bar’. Les commandes sont injectées sur l’entrée standard. On attend le prompt ’$’ et on lance la commande ls avant de se déconnecter du shell via la commande exit.

 $ pdip telnet remote
 recv "login"
 send "foo\n" # Nom de login ’foo’
 recv "Password"
 send "bar\n" # Mot de passe ’bar’
 recv "\$ " # Inhibition du caractère spécial ’$’ avec ’\’
 send "ls\n" # Lance la commande ’ls’
 recv "\$ "
 send "exit\n" # Sortie du shell
 exit # Sortie de PDIP
 $

L’exemple suivant montre la mise en œuvre d’une connexion ftp vers un hôte appelé ’remote’ avec le nom de login ’foo’ et le mot de passe ’bar’. Les commandes sont injectées sur l’entrée standard. On attend l’apparition du prompt ’ftp>’ en début de ligne et on lance la commande ’help’ avant de se déconnecter de ftp avec la commande ’quit’.

 $ pdip ftp remote
 recv "Name"
 send "foo\n" # Nom de login ’foo’
 recv "Password"
 send "bar\n" # Mot de passe ’bar’
 recv "^ftp> " # Prompt en début de ligne
 send "help\n" # Lancement de la commande help
 recv "^ftp> "
 send "quit\n" # Sortie de FTP
 exit # Sortie de PDIP
 $

L’exemple suivant met en œuvre une session avec la calculatrice bc qui a la particularité de ne pas afficher de prompt en début de ligne de commande. On utilise le méta caractère ’$’ pour se synchroniser sur les fins de ligne. Deux opérations sont lancées ’3+4’ et ’6*8’. Ensuite on quitte bc.

 $ pdip bc
 recv "warranty" # Vers la fin de la bannière de démarrage
 recv "$" # Fin de la dernière ligne de la bannière
 send "3+4\n"
 recv "$" # Réception de la fin de ligne de l’écho
 recv "$" # Réception de la fin de ligne du résultat
 send "6*8\n"
 recv "$"
 recv "$"
 send "quit\n" # Sortie de BC
 exit # Sortie de PDIP
 $

L’exemple suivant met en œuvre une session telnet vers un hôte appelé ’remote’ avec un nom de login ’foo’ et un mot de passe ’bar’. Les commandes sont injectées sur l’entrée standard. Avec une expression régulière, on attend un prompt de la forme "....-<login_name>-pathname> " ou "....-<login_name>-pathname>" en début de ligne. Ensuite la commande ’ls -l’ est lancée avant de se déconnecter de telnet(1) avec la commande ’exit’.

 $ pdip telnet remote
 recv "login:"
 send "foo\n" # Nom de login ’foo’
 recv "Password:"
 send "bar\n" # Mot de passe ’bar’
 recv "^(.)+-foo-(.)+(>|> )$" # Prompt en début de ligne
 send "ls -l\n" # Lance la commande ’ls -l’
 recv "^(.)+-foo-(.)+(>|> )$"
 send "exit\n" # Sortie de telnet
 exit # Sortie de PDIP
 $

Notes et références

[modifier | modifier le code ]

AltStyle によって変換されたページ (->オリジナル) /