Pages : 1
#1 Le 10/12/2007, à 04:55
- ppmt
python + pexpect +xterm marche pas
Salut,
je suis en train de commencer a coder une application en Python donc.
Je decouvre Python donc soyez indulgent.
Je commence petit et voila un script que j'ai ecrit pour me connecter a "distance" sur ma machine locale
#!/usr/bin/env python
#This connect locally on the machine.
import pexpect
child = pexpect.spawn('ssh localhost')
child.expect('Password:')
child.send('password\r')
child.expect (':~>')
child.send ('echo test\r')
child.interact()
Ce script la marche tres bien. la ou ca se complique c'est quand je veux lancer un xterm avec ma commande ssh......
#!/usr/bin/env python
#This connect locally on the machine.
import pexpect
child = pexpect.spawn('xterm -e ssh localhost')
child.expect('Password:')
child.send('password\r')
child.expect (':~>')
child.send ('echo test\r')
child.interact()
Le xterm s'ouvre et me demande mon mot de pass mais le script ne lui envoie. Je me doute que c'est a cause du fait que le xterm est une autre entite et du coup le script ne recoit pas la chaine
password mais je me doute aussi qu'il doit bien y avoir une maniere de faire en sorte que mon
script puisse envoyer le mot de passe a la fenetre xterm!
Quelqu'un aurait-il une idee?
le dock dont vous avez toujours rêvé Cairo-Dock
irc://irc.freenode.net/#Cairo-Dock-fr
Hors ligne
#2 Le 11/12/2007, à 07:25
- ppmt
Re : python + pexpect +xterm marche pas
un petit up pour les crack de Python?
le dock dont vous avez toujours rêvé Cairo-Dock
irc://irc.freenode.net/#Cairo-Dock-fr
Hors ligne
#3 Le 12/12/2007, à 22:05
- JoelS
Re : python + pexpect +xterm marche pas
Ca n'a rien à voir avec Python.
Un xterm, c'est une interface graphique (si si), pas un shell. Rien n'est prévu par défaut dans xterm pour connecter à l'entrée standard de xterm et lire des commandes. En fait, xterm par défaut lance le shell de l'utilisateur. Via l'option -e il exécute à la place du shell la commande passée en paramètre. Point.
Expect (enfin pexpect dans ton cas, mais je suppose que c'est construit suivant le modèle d'Expect) lui va exécuter (via spawn) une commande (dans ton cas xterm) et se débrouiller pour connecter l'entrée et la sortie standard de la commande (donc xterm). Mais xterm n'utilise ni l'un ni l'autre. Donc il ne va rien se passer!
Si tu veux piloter un ssh avec Expect, alors lances le directement dans ton processus Python via child.spawn('ssh')
Hors ligne
#4 Le 13/12/2007, à 08:03
- ppmt
Re : python + pexpect +xterm marche pas
Merci,
En fait mon idee c'est de faire une interface graphique en Python (a terme!) qui permettrais d'ouvrir un shell xterm et y lancer un ssh tous ca commande par pexpect (qui est bien une implementation pyhon de expect)
Pour etre precis au boulot je dois souvent ouvrir plusieurs fenetres avec un ssh dans chaque. Mon premier script marche bien si j'ouvre un shell pour le lancer
Mais bon peut-etre que ce n'est pas possible
Merci de ta reponse en tous cas
le dock dont vous avez toujours rêvé Cairo-Dock
irc://irc.freenode.net/#Cairo-Dock-fr
Hors ligne
#5 Le 14/12/2007, à 13:48
- JoelS
Re : python + pexpect +xterm marche pas
En fait mon idee c'est de faire une interface graphique en Python (a terme!) qui permettrais d'ouvrir un shell xterm et y lancer un ssh tous ca commande par pexpect (qui est bien une implementation pyhon de expect)
Pour etre precis au boulot je dois souvent ouvrir plusieurs fenetres avec un ssh dans chaque. Mon premier script marche bien si j'ouvre un shell pour le lancer
Mais bon peut-etre que ce n'est pas possible
C'est pas que c'est pas possible, c'est que c'est pas clair: tu veux faire quoi exactement ? Démarrer un script pexpect qui lance un xterm démarrant un ssh et qui te connecte automatiquement à une machine et ensuite travailler en mode interactif ? Et pouvoir faire ça paralléle ?
Si oui, je pense qu'utiliser pexpect pour ça c'est de l'artillierie lourde. Ssh te permet de faire des connexions automatiques si tu es capable d'à la fois fournir le bon certificat et configurer le compte distant pour accepter ce certificat. C'est beaucoup plus efficace.
Sinon si tu veux piloter avec pexepct des scripts distants lancer par ssh dans un xterm, je pense qu'il faut plutà´t faire dans ton interface Python l'équivalent d'un system "xterm -e myPexpectScript": lancer un xterm qui exécute le script pexpect de pilotage d'un ssh. Surtout que ce dernier point, tu sais déjà le faire.
Hors ligne
#6 Le 15/12/2007, à 03:49
- ppmt
Re : python + pexpect +xterm marche pas
Merci de tes conseils...
Comme je le dis je demarre en Python et pour etre honnete je n'ai pas vraiment un esprit programmeur
Je suis en train de lire "Instant Python" donc j'espere qu'a terme je vais finir pas y arriver
Je vais creuser ta derniere idee. Tu as raison je n'ai pas besoin de pexpect pour lancer le xterm.
J'arrive a lanver un xterm avec le script ssh comme argument. Ca l'air de marcher mais le xterm ferme aussitot malgre le fait que j'ai mis un interact a la fin.
Bon je crois que je vais me remettre a lire
Merci pour ton temps en tout cas
le dock dont vous avez toujours rêvé Cairo-Dock
irc://irc.freenode.net/#Cairo-Dock-fr
Hors ligne
#7 Le 15/12/2007, à 23:33
- JoelS
Re : python + pexpect +xterm marche pas
Ca l'air de marcher mais le xterm ferme aussitot malgre le fait que j'ai mis un interact a la fin.
De mémoire, interact rend la main à l'utilisateur qui peut alors travailler en mode interactif avec le processus spawner par expect, en passant au traver de celui-ci (à une époque, le script autoexpect surveillait les interactions entre l'utilisateur et le processus au travers d'intercat pour dumper un modèle de script expect qui reproduisait l'ensemble de la session). Je suppose que comme la dernière commande de ton script est cet interact, le script est considéré comme fini pour l'xterm, et le processus s'achève.
Ca fait trop longtemps que j'ai fais de l'expect pour t'aider plus la-dessus. Il y a(vait) un excellent bouquin sur expect qui doit s'appeler Exploring Expect ou un truc comme ça. Si tu le trouve, tu peux peut-être avoir des réponses appropriées.
Bonne chance.
Hors ligne
#8 Le 16/12/2007, à 01:38
- ppmt
Re : python + pexpect +xterm marche pas
Humm! c'est ca la difference quand on a un esprit programmeur ou pas
On peut explique des fonctionnements logique de programme!
Tu as sans aucun doute raison pour le fait que le script se termine et du coup le
xterm se ferme lui aussi...
Il ne me reste plus qu'a troubver la combine
je vais chercher ton livre
Merci
le dock dont vous avez toujours rêvé Cairo-Dock
irc://irc.freenode.net/#Cairo-Dock-fr
Hors ligne