[Perl] telnet connexion!! (resolu)

telnet connexion!! (resolu) [Perl] - Perl - Programmation

Marsh Posté le 12-05-2006 à 15:20:01    

je vous explique le topo!!
 
Sur une machine je lance vlc avec la commande suivant:
 

Code :
  1. vlc -I rc --host 127.0.0.1


 
donc ma console RC et accessible en telnet ainsi je px piloter vlc!
 
donc je lance une connexion telnet classique avec putty et il n'y a pas de login et de passwd.  
Lorsque j'arrive sur ma console RC de vlc je tape
 

Code :
  1. goto 10


 
vlc lit donc le flux 10 de la playlist et retourne des infos:
 

Code :
  1. goto: returned 0 (no error)
  2. status change: ( stop state: 0 )
  3. status change: ( new input: udp://@x.x.x.x )
  4. status change: ( audio volume: 256 )
  5. status change: ( play state: 1 )


 
maintenant en perl:
 
le script perl de connexion

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Net::Telnet;
  4. my $host = 'x.x.x.x';#
  5. my $prompt = '/\[.+\]\$ $/';#
  6. $t->open($host);
  7. $t->cmd("goto 10\n" );
  8. ($result) = $t->waitfor();
  9. print $result;
  10. exit(0);


 
le probleme c'est que mon script perl ne me retourne pas le result de la commande!!
une idée?


Message édité par mc40 le 14-05-2006 à 13:55:08
Reply

Marsh Posté le 12-05-2006 à 15:20:01   

Reply

Marsh Posté le 13-05-2006 à 23:15:59    

Bonjour,
 
Selon la doc:

Code :
  1. ($prematch, $match) = $obj->waitfor($matchop);


Donc en faisant :

Code :
  1. ($result) = $t->waitfor();


tu récupères en fait $prematch qui contient la chaîne vide vu que $match contient toute la réponse.  
Si le problème vient bien de là, tu dois faire :

Code :
  1. (undef, $result) = $t->waitfor();


 
Sinon, plus simplement, tu peux utiliser :

Code :
  1. @result = $t->cmd("goto 10" );


Ce qui te permet de récupérer une ligne de résultat par élément du tableau.
(d'ailleurs, selon la doc de cmd, le \n est par défaut automatiquement ajouté)

Reply

Marsh Posté le 14-05-2006 à 13:53:44    

hello  
 
merci pour ta reponse, mais j'ai laissé tombé telnet pour les sockets
unix bien plus "local" mdr!!Pour le changement de chaine TV j'utilise
donc xkbind qui pour chaque keycode renvoyé par ma télécommande
ati remote exécute le script telecom.pl avec en paramètre le num
de la touche.
 
"/home/telecom.pl 1"
 
telecom.pl renvoi le param à zap.pl par le biais d'un socket unix.
 
zap.pl est la pour gérer les chaines supérieures à 9. Lorsque zap.pl
reçoit le caractère spétial "attention je vx un chaine sup a 9", hop
petit fork le pere attend que le fils lui renvoie le chiffre des dizaines
et ensuite le pere attend le chiffre des unités et zap.pl revoie le
"goto chaine" a vlc et ça zap.
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed