script Python exécuté dans un script Perl, saisie au clavier ?
9 réponses
ctobini
Bonjour,
Je dois utiliser un script Python qui demande =E0 l'utilisateur de
saisir certaines valeurs.
Je souhaite appeler ce script dans un de mes scripts Perl, or, en
utilisant 'system' ou 'exec', il me semble impossible de faire ceci (la
doc pr=E9cise que Perl laisse =E0 ce moment l=E0 enti=E8rement la main au
programme appel=E9).
Je souhaite savoir s'il y a moyen d'avoir la partie renvoy=E9e au
Terminal par Python dans ces conditions, et de saisir ainsi les valeurs
demand=E9es.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) 20 Sep 2005 08:07:45 -0700, "ctobini" écrivait (wrote):
Je dois utiliser un script Python qui demande à l'utilisateur de saisir certaines valeurs.
Je souhaite appeler ce script dans un de mes scripts Perl, or, en utilisant 'system' ou 'exec', il me semble impossible de faire ceci (la doc précise que Perl laisse à ce moment là entièrement la main au programme appelé).
Je souhaite savoir s'il y a moyen d'avoir la partie renvoyée au Terminal par Python dans ces conditions, et de saisir ainsi les valeurs demandées.
Si vous voulez communiquer dans les deux sens avec votre script (envoyer des commandes et recevoir les résultats), vous pouvez regarder du côté du module Expect.
Sinon, une autre voie plus efficace serait le module Inline::Python.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Je dois utiliser un script Python qui demande à l'utilisateur de
saisir certaines valeurs.
Je souhaite appeler ce script dans un de mes scripts Perl, or, en
utilisant 'system' ou 'exec', il me semble impossible de faire ceci (la
doc précise que Perl laisse à ce moment là entièrement la main au
programme appelé).
Je souhaite savoir s'il y a moyen d'avoir la partie renvoyée au
Terminal par Python dans ces conditions, et de saisir ainsi les valeurs
demandées.
Si vous voulez communiquer dans les deux sens avec votre script
(envoyer des commandes et recevoir les résultats), vous pouvez
regarder du côté du module Expect.
Sinon, une autre voie plus efficace serait le module Inline::Python.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 20 Sep 2005 08:07:45 -0700, "ctobini" écrivait (wrote):
Je dois utiliser un script Python qui demande à l'utilisateur de saisir certaines valeurs.
Je souhaite appeler ce script dans un de mes scripts Perl, or, en utilisant 'system' ou 'exec', il me semble impossible de faire ceci (la doc précise que Perl laisse à ce moment là entièrement la main au programme appelé).
Je souhaite savoir s'il y a moyen d'avoir la partie renvoyée au Terminal par Python dans ces conditions, et de saisir ainsi les valeurs demandées.
Si vous voulez communiquer dans les deux sens avec votre script (envoyer des commandes et recevoir les résultats), vous pouvez regarder du côté du module Expect.
Sinon, une autre voie plus efficace serait le module Inline::Python.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
pointer2002
Essaye IPC::Open2 ou Open3 (au lieu de exec ou system) qui permet de piloter un sous process en recupérant les flux d'entrée et de sortie auquel cas il faut que les données à récupérer du script python soient écrites sur STDOUT. Sinon il est sans doute possible de rediriger les sorties de ton script python vers un fichier et de lire ce fichier avec perl ...
Essaye IPC::Open2 ou Open3 (au lieu de exec ou system) qui permet de
piloter un sous process en recupérant les flux d'entrée et de sortie
auquel cas il faut que les données à récupérer du script python
soient écrites sur STDOUT.
Sinon il est sans doute possible de rediriger les sorties de ton script
python vers un fichier et de lire ce fichier avec perl ...
Essaye IPC::Open2 ou Open3 (au lieu de exec ou system) qui permet de piloter un sous process en recupérant les flux d'entrée et de sortie auquel cas il faut que les données à récupérer du script python soient écrites sur STDOUT. Sinon il est sans doute possible de rediriger les sorties de ton script python vers un fichier et de lire ce fichier avec perl ...
ctobini
Bonjour et merci de la réponse, je me suis intéressé au module Expect,
J'ai bien compris la manière générale dont fonctionne Expect, mais mon problème c'est la manière de l'utiliser :
Côté Python, si j'ai un script simple :
print 'Saisir nombre 1' nb1 = input() print 'Saisir nombre 2' nb2 = input()
Côté perl, j'utilise my $exp = Expect->spawn(./script.py); my $line = $exp->expect me renvoie chaque ligne
Si j'ai bien compris, c'est au moment où Python demande nb1 = input() qu'il faudrait effectuer le $line->send() et là je ne sais pas comment le lui indiquer.
Merci si vous aviez des infos là-dessus.
C. Tobini
Bonjour et merci de la réponse, je me suis intéressé au module
Expect,
J'ai bien compris la manière générale dont fonctionne Expect, mais
mon problème c'est la manière de l'utiliser :
Côté Python, si j'ai un script simple :
print 'Saisir nombre 1'
nb1 = input()
print 'Saisir nombre 2'
nb2 = input()
Côté perl, j'utilise
my $exp = Expect->spawn(./script.py);
my $line = $exp->expect me renvoie chaque ligne
Si j'ai bien compris, c'est au moment où Python demande nb1 = input()
qu'il faudrait effectuer le $line->send() et là je ne sais pas comment
le lui indiquer.
Bonjour et merci de la réponse, je me suis intéressé au module Expect,
J'ai bien compris la manière générale dont fonctionne Expect, mais mon problème c'est la manière de l'utiliser :
Côté Python, si j'ai un script simple :
print 'Saisir nombre 1' nb1 = input() print 'Saisir nombre 2' nb2 = input()
Côté perl, j'utilise my $exp = Expect->spawn(./script.py); my $line = $exp->expect me renvoie chaque ligne
Si j'ai bien compris, c'est au moment où Python demande nb1 = input() qu'il faudrait effectuer le $line->send() et là je ne sais pas comment le lui indiquer.
Merci si vous aviez des infos là-dessus.
C. Tobini
ctobini
Bonjour et merci de la réponse,
Côté Python, il y'a une demande du style :
print 'Entrez l'adresse IP :' ip = input(); print 'Entrez utilisateur :' util = input();
Il faudrait donc que je puisse renseigner ip et util.
C. Tobini
Bonjour et merci de la réponse,
Côté Python, il y'a une demande du style :
print 'Entrez l'adresse IP :'
ip = input();
print 'Entrez utilisateur :'
util = input();
Il faudrait donc que je puisse renseigner ip et util.
print 'Entrez l'adresse IP :' ip = input(); print 'Entrez utilisateur :' util = input();
Il faudrait donc que je puisse renseigner ip et util.
C. Tobini
Paul Gaborit
À (at) 21 Sep 2005 06:25:28 -0700, "ctobini" écrivait (wrote):
Côté Python, si j'ai un script simple :
print 'Saisir nombre 1' nb1 = input() print 'Saisir nombre 2' nb2 = input()
Côté perl, j'utilise my $exp = Expect->spawn(./script.py); my $line = $exp->expect me renvoie chaque ligne
Si j'ai bien compris, c'est au moment où Python demande nb1 = input() qu'il faudrait effectuer le $line->send() et là je ne sais pas comment le lui indiquer.
Je n'utilise jamais Expect (je n'en ai jamais eu besoin). Mais, au vu de votre description, j'attendrai de recevoir 'Saisir nombre 1' en utilisant la méthode 'expect' *avec* ses paramètre (timeout et pattern) avant d'utiliser 'send' pour écrire la valeur... et ainsi de suite.
La question suivante est "quoi faire lorsque 'expect' se termine sur un timeout ?"...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
print 'Saisir nombre 1'
nb1 = input()
print 'Saisir nombre 2'
nb2 = input()
Côté perl, j'utilise
my $exp = Expect->spawn(./script.py);
my $line = $exp->expect me renvoie chaque ligne
Si j'ai bien compris, c'est au moment où Python demande nb1 = input()
qu'il faudrait effectuer le $line->send() et là je ne sais pas comment
le lui indiquer.
Je n'utilise jamais Expect (je n'en ai jamais eu besoin). Mais, au vu
de votre description, j'attendrai de recevoir 'Saisir nombre 1' en
utilisant la méthode 'expect' *avec* ses paramètre (timeout et
pattern) avant d'utiliser 'send' pour écrire la valeur... et ainsi de
suite.
La question suivante est "quoi faire lorsque 'expect' se termine sur
un timeout ?"...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Sep 2005 06:25:28 -0700, "ctobini" écrivait (wrote):
Côté Python, si j'ai un script simple :
print 'Saisir nombre 1' nb1 = input() print 'Saisir nombre 2' nb2 = input()
Côté perl, j'utilise my $exp = Expect->spawn(./script.py); my $line = $exp->expect me renvoie chaque ligne
Si j'ai bien compris, c'est au moment où Python demande nb1 = input() qu'il faudrait effectuer le $line->send() et là je ne sais pas comment le lui indiquer.
Je n'utilise jamais Expect (je n'en ai jamais eu besoin). Mais, au vu de votre description, j'attendrai de recevoir 'Saisir nombre 1' en utilisant la méthode 'expect' *avec* ses paramètre (timeout et pattern) avant d'utiliser 'send' pour écrire la valeur... et ainsi de suite.
La question suivante est "quoi faire lorsque 'expect' se termine sur un timeout ?"...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Dav'
Bonjour, Pour faire quick and dirty il y a surement (sous unix) un moyen avec un echo et la commande system.
Voici ce que j'ai testé :
programme t.pl ( equivalent de votre programe python) :
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne d'input finit sur un timeout (une erreur donc), c'est là que je ne sais pas comment traiter...
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne
d'input finit sur un timeout (une erreur donc), c'est là que je ne
sais pas comment traiter...
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne d'input finit sur un timeout (une erreur donc), c'est là que je ne sais pas comment traiter...
Paul Gaborit
À (at) 21 Sep 2005 08:26:13 -0700, "ctobini" écrivait (wrote):
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne d'input finit sur un timeout (une erreur donc), c'est là que je ne sais pas comment traiter...
Peut-on voir le code ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne
d'input finit sur un timeout (une erreur donc), c'est là que je ne
sais pas comment traiter...
Peut-on voir le code ?
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 21 Sep 2005 08:26:13 -0700, "ctobini" écrivait (wrote):
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne d'input finit sur un timeout (une erreur donc), c'est là que je ne sais pas comment traiter...
Peut-on voir le code ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
ctobini
À (at) 21 Sep 2005 08:26:13 -0700, "ctobini" écrivait (wrote):
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne d'input finit sur un timeout (une erreur donc), c'est là que je ne sais pas comment traiter...
Peut-on voir le code ?
Bonjour et désolé de vous répondre un peu tardivement,
C'est gentil de me proposer d'inverstir de votre temps dans la lecture du code mais il faudrait avant que je fixe 2 choses : il faudrait que je le dépiote intégralement le script afin de ne pas envoyer tout et n'importe quoi (le script fait un millier de lignes) et comme c'est dans un cadre professionnel, je ne suis pas du tout certain de pouvoir le faire :-/
Maintenant, la partie me concernant est réellement du style 1. ligne d'avertissement de saisie 2. input
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne
d'input finit sur un timeout (une erreur donc), c'est là que je ne
sais pas comment traiter...
Peut-on voir le code ?
Bonjour et désolé de vous répondre un peu tardivement,
C'est gentil de me proposer d'inverstir de votre temps dans la lecture
du code mais il faudrait avant que je fixe 2 choses : il faudrait que
je le dépiote intégralement le script afin de ne pas envoyer tout et
n'importe quoi (le script fait un millier de lignes) et comme c'est
dans un cadre professionnel, je ne suis pas du tout certain de pouvoir
le faire :-/
Maintenant, la partie me concernant est réellement du style
1. ligne d'avertissement de saisie
2. input
À (at) 21 Sep 2005 08:26:13 -0700, "ctobini" écrivait (wrote):
Oui, 'Saisir nombre 1' est bien repéré avec un regex, mais la ligne d'input finit sur un timeout (une erreur donc), c'est là que je ne sais pas comment traiter...
Peut-on voir le code ?
Bonjour et désolé de vous répondre un peu tardivement,
C'est gentil de me proposer d'inverstir de votre temps dans la lecture du code mais il faudrait avant que je fixe 2 choses : il faudrait que je le dépiote intégralement le script afin de ne pas envoyer tout et n'importe quoi (le script fait un millier de lignes) et comme c'est dans un cadre professionnel, je ne suis pas du tout certain de pouvoir le faire :-/
Maintenant, la partie me concernant est réellement du style 1. ligne d'avertissement de saisie 2. input