IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Problème script expect


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut Problème script expect
    Bonjour à tous, Voila j'ai un script shell de type expect qui me permet d'ouvrir minicom, apres avoir réalisé mes commandes je souhaite quitter et fermer le process minicom, le probleme c'est que ca ne se ferme pas, j'ai essayé beaucoup de chose mais en vain,
    voila le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #!/usr/bin/expect -f
    set arg1 [lindex $argv 0]
    set arg2 [lindex $argv 1]
     
     
    spawn minicom
     
    expect {  "#"
              "password:"
              "Q0"
    }
    set timeout 15;
    send "\r"
      expect "buildroot login:"
      # Send the username
      send "root\r"
    set timeout -1; 
      expect "#"
    send "\r"
     expect "#"
      # Send the prebuilt command, and then wait for another shell prompt.
    send "test_general_zapper_st -g 0-$arg1-$arg2\r"
    set timeout  -1; #the timeout must be bigger than the timeout of the fct poll in the test. 
    expect "#"
    expect eof

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Le code ci-dessous marche chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    expect -gl "\\\[*]\$*"
    send -- "\u0001x\n"	# Envoie CTRL-A X
    expect -gl "\\\[*]\$*"
    send -- "\n"		# Répond à la question "Quittez minicom ? (Yes - No)"
    exit

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    Je vais l essayer au boulot lundi et je reviendrai vers toi.. j espere que c va marcher

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    ca marche toujours pas es ce que les modifs sont justes?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #!/usr/bin/expect -f
    set arg1 [lindex $argv 0]
    set arg2 [lindex $argv 1]
     
    spawn minicom
    expect {  "#"
              "password:"
              "Q0" 
              ">"
    }
    set timeout 15;
    send "\r"
      expect "buildroot login:"
     
      send "root\r"
    set timeout 5; 
      expect { "#" 
               ">"
    }
    set timeout 5; 
    send "\r"
    send "\r"
    expect { "#" 
             ">"
    }
     
    send "test_general_zapper_st -g 0-$arg1-$arg2\r"
    set timeout  -1; 
    expect { "#" 
             ">"
    }
    send "\r"
    expect -gl "#"
    send "\u0001x\n"
    	# Envoie CTRL-A X
    expect -gl "#"
    send "\n"		# Répond à la question "Quittez minicom ? (Yes - No)"
    exit

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Peut être est-ce les séquences d'échappement qui ne correspondent pas à ton système

    Tiens j'avais trouvé ce petit programme à lancer sous expect afin de trouver comment sont interprétées les différentes touches.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/expect
     
    exp_internal 1
    log_user 1
    while 1 {
            expect_user -re ".+" 
            }
    Il suffit de rendre le programme exécutable et de le lancer, ensuite il faut appuyer sur les touches désirées, dans ton cas "CTRL-A X" puis d'appuyer sur la touche ENTRÉE et enfin "CTRL-C" pour interrompre le programme.
    Après il n'y a qu'à regarder comment sont envoyées les séquences d'échappement.

    Ci-après l'exemple chez moi pour "CTRL-A X" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ ./script_test.sh 
    Gate keeper glob pattern for '.+' is ''. Not usable, disabling the performance booster.
     
    expect: does "" (spawn_id exp0) match regular expression ".+"? (No Gate, RE only) gate=yes re=no
    ^Ax
     
    expect: does "\u0001x\n" (spawn_id exp0) match regular expression ".+"? (No Gate, RE only) gate=yes re=yes
    expect: set expect_out(0,string) "\u0001x\n"
    expect: set expect_out(spawn_id) "exp0"
    expect: set expect_out(buffer) "\u0001x\n"
    Gate keeper glob pattern for '.+' is ''. Not usable, disabling the performance booster.
     
    expect: does "" (spawn_id exp0) match regular expression ".+"? (No Gate, RE only) gate=yes re=no
    ^Csighandler: handling signal(2)
    async event handler: Tcl_Eval(exit 130)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    expect: does "\u0001x\n" (spawn_id exp0) match regular expression ".+"? yes
    merci pour le script ca me renvoie la meme chose , mon script se plante juste apres la fin de l'execution de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     send "test_general_zapper_st -g 0-$arg1-$arg2\r"
    ca me renvoie mon " # " mais apres plus rien . Mon timeout ne peut creer prob?

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par djaminebiz Voir le message
    ca me renvoie mon " # " mais apres plus rien . Mon timeout ne peut creer prob?
    T'as essayé de l'enlever ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    si j’enlève le timeout -1 mon test ne se termine pas et minicom se ferme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send "test_general_zapper_st -g 0-$arg1-$arg2\r"
    je comprend pas pourquoi ça reste bloqué après "#" ça ne fait rien du tout même si je fais
    send "\r"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #!/usr/bin/expect -f
    set arg1 [lindex $argv 0]
    set arg2 [lindex $argv 1]
     
    spawn minicom
    expect {  "#"
              "password:"
              "Q0" 
              ">"
    }
    set timeout 15;
    send "\r"
      expect "buildroot login:"
     
      send "root\r"
    set timeout 5; 
      expect { "#" 
               ">"
    }
    set timeout 5; 
    send "\r"
    send "\r"
    expect { "#" 
             ">"
    }
     
    send "test_general_zapper_st -g 0-$arg1-$arg2\r"
    set timeout  -1;                                     #probleme a ce niveau
    expect { "# " 
             ">"
             "#"  
    }
    send "\r"
     
    send --  "\u0001x\n"	# Envoie CTRL-A X
    send "\n"
    		# Répond à la question "Quittez minicom ? (Yes - No)"
    exit

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par djaminebiz Voir le message
    si j'enleve le timeout -1 mon test ne se termine pas et minicom se ferme
    Donc les commandes marchent, c'est déjà ça


    je comprend pas pkoi ca reste bloqué apres "#" ca ne fais rien du tout mem si je fais
    send "\r"
    Ne sachant pas ce que fais ta commande (test) je ne peux te répondre

    Ton test lancé en direct (sans passer par expect) marche bien ?
    Tu as essayé un "autoexpect" ?

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    En fait moi je fais des tests sur une carte embarqué.. Mon test marche sans probleme sans expect. quand il est lancé à partir de minicom, je recois les traces du traitement, apres quand ca fini ca renvoie le # .
    Je connais pas l 'auto expect ca consiste en quoi?

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    En gros autoexpect te permet de générer automatiquement (ou presque) un script expect à partir d'une session lancée interactivement. Il génère donc un fichier avec toutes les commandes lancée durant la session interactive et te permet donc de voir tout le processus qui en découle.

    Peut être pourrais-tu y voir ce qui cloche

    autoexpect

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    j'ai juste eu à enlever de mon "Timeout -1" le "-1" et je l'ai changé par une autre valeur ca marche.
    alors je sais pas ce qui se passe mais je crois qu'il ne voit pas le prompt d'aprés le test.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    Bonjour je reviens vers vous car je rencontre un probleme semblable . voila pour les raccourcis ca marche à merveille sauf pour le "CTRL-C".
    comment je récupere la séquence d'echappement de ce raccourcis??
    merci

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Essaye avec un \u0003

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Par défaut
    Merci beaucoup pour la réponse, c'est exactement ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème script a plusieurs
    Par cyrill.gremaud dans le forum ASP
    Réponses: 3
    Dernier message: 06/04/2006, 23h08
  2. problème script
    Par Didjetridoo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/04/2006, 15h12
  3. [Débutant] Problème script ressource tuto
    Par MaN@eDeN dans le forum Windows
    Réponses: 8
    Dernier message: 08/03/2006, 23h20
  4. Problème : Script PHP IE NOK Firefox OK
    Par Saiyan dans le forum Langage
    Réponses: 40
    Dernier message: 15/11/2005, 23h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo