Bonjour,

Je suis entrain de développer un programme en perl qui permet de me connecter sur différentes machines et de récupérer des informations systèmes et/ou des informations qui sont stockées en base de données.

Afin de récupérer les informations stockées en base, je dois passé par un script EXPECT. Quelque chose dans le script ne fonctionne pas mais je ne sais pas quoi :

J'ai testé en lancant le script dans un shell mais aussi via mon script perl.

Pour le débugg, j'ai utilisé l'option -d et Voici le code :

Code expect : 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
#!/usr/bin/expect -f
set Machine [lindex $argv 0];
set timeout 10;
set force_conservative 1 ;
set exp_internal 1;

set cmd [open /chemin/vers/fichier/commande/cmd.cmd r] # Il contient quelques commandes Openet
spawn ssh user@$Machine;
expect "password:";
send "passwd";
expect "$";
send "ssh user2@$Machine\r";
expect "password:";
send "passwd\n";
expect "Prompt";
send "OpenDB\r";
while {[gets $cmd line] != -1} {
  expect {
    "solsql>" {
      send "$line\r";
    }
    timeout {
      exit 1;
    }
  }
}
expect {
  "solsql>" {
    send "exit\n";
  }
}

SQL statements terminated by a semicolon.\r\nExit by giving command: exit;\r\nsolsql>"
": must be -i, -h, -s, -null, -0, -raw, -break, or --
while executing
"send "$line\r""
invoked from within
"expect -nobrace solsql> {
send "$line\r";
} timeout {
exit 1;
}"
invoked from within
"expect {
"solsql>" {
send "$line\r";
}
timeout {
exit 1;
}
}"
("while" body line 2)
invoked from within
"while {[gets $cmd line] != -1} {
expect {
"solsql>" {
send "$line\r";
}
timeout {
exit 1;
}
}
}"
(file "/mon/repertoire/bin/test2.exp" line 17)
write() failed to write anything - will sleep(1) and retry...
La première ligne rouge indique la ligne de l'erreur
La 2nd ligne en rouge indique que je suis connecté à la base. De plus le prompt de la base est présent solsql>.

Si vous avez une idée du pourquoi du comment je suis preneur !

Merci d'avance