Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad

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

ppmt a écrit :

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 sad

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 sad
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

ppmt a écrit :

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 smile

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 smile

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