A voir également:
- Python lancer un programme externe
- Ouvrir une application avec python - Meilleures réponses
- Python lancer un programme - Meilleures réponses
- Commande en python pour exécuter un programme externe - Forum - Python
- [Python] Lancer une appli via python ✓ - Forum - Python
- [Python] Lancer un programme bash ✓ - Forum - Python
- Lancer un programme python depuis un script shell - Forum - Shell
- Lancer programme python sublime text 3 - Forum - Python
6 réponses
sebsauvage
- Messages postés
- 32840
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
communicate n'est utile que s'il y a des allers-retours entre l'application lancée et ton programme (exemple: l'application lancée pose des questions et attend une réponse (habituellement tapée au clavier par l'utilisateur).
Si tu veux juste lancer le programme en lui donnant des paramètres et récupérer le contenu, communicate() n'est pas utile.
Pour passer des paramètre, il suffit de les donner sous forme de liste à popen.
Exemple: Je lance le programme compress et je lui passe 2 options:
-V et un nom de fichier:
(Là en prime le récupère le texte qu'a affiché le programme dans outputlines)
Si tu veux juste lancer le programme en lui donnant des paramètres et récupérer le contenu, communicate() n'est pas utile.
Pour passer des paramètre, il suffit de les donner sous forme de liste à popen.
Exemple: Je lance le programme compress et je lui passe 2 options:
-V et un nom de fichier:
p = subprocess.Popen(args=["compress","-V",nomdefichier], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) outputlines = p.stdout.readlines() p.wait() print outputlines
(Là en prime le récupère le texte qu'a affiché le programme dans outputlines)
sebsauvage
- Messages postés
- 32840
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
Euh encore une petite question...
C'est possible de passer le fichier à exécuter avec stdin par un Pipe?
Oui !
Là je pense que tu aura besoin de communicate().
C'est possible de passer le fichier à exécuter avec stdin par un Pipe?
Oui !
Là je pense que tu aura besoin de communicate().
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Salut,
Je ne sais pas comment ça se passe avec popen pour les arguments de programmes.
Avec les fonctions exec par contre oui.
Avec la fonction os.execl, tu passes en premier le nom du programme puis les arguements au fur et à mesure exemple avec la commande:
Ca donnera
Et si tu ne connais pas à l'avance le nombre d'arguments, tu peux mettre tout ça dans un tableau et utiliser execv:
Je ne sais pas comment ça se passe avec popen pour les arguments de programmes.
Avec les fonctions exec par contre oui.
Avec la fonction os.execl, tu passes en premier le nom du programme puis les arguements au fur et à mesure exemple avec la commande:
cp machin truc
Ca donnera
os.execl('cp', 'machin', 'truc')
Et si tu ne connais pas à l'avance le nombre d'arguments, tu peux mettre tout ça dans un tableau et utiliser execv:
args=['machin','truc'] os.execv('cp',args)
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
Oui exec est reservé, c'est pour exécuter un fichier python.
Tu es sûr que tu as lu tout mon message?
En fait je ne parle pas de la fonction globale exec mais plutôt des methodes
issues de la classe os qui commencent par exec (et y'en a plein: os.execv, os.execl etc...)
Tu es sûr que tu as lu tout mon message?
En fait je ne parle pas de la fonction globale exec mais plutôt des methodes
issues de la classe os qui commencent par exec (et y'en a plein: os.execv, os.execl etc...)
Utilisateur anonyme
>
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
OK autant pour moi, j'avais pas vu le "l" de execl().
Si je fais :
os.execl('/opt/ActivePython-2.4/bin/python2.4', '/opt/ActivePython-2.4/bin/python_test.py')
Python se lance effectivement, mais le fichier passé en argument ne s'exécute pas.
Si je fais :
os.execl('/opt/ActivePython-2.4/bin/python2.4', '/opt/ActivePython-2.4/bin/python_test.py')
Python se lance effectivement, mais le fichier passé en argument ne s'exécute pas.
kilian
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
- Messages postés
- 8731
- Date d'inscription
- vendredi 19 septembre 2003
- Statut
- Modérateur
- Dernière intervention
- 20 août 2016
OK autant pour moi, j'avais pas vu le "l" de execl().
Gredin ;-)
Du coup tu vois quoi? Un shell python?
Tu es sûr du chemin du fichier?
Je regarderai ça plus tard, j'ai pas trop le temps :-\
Gredin ;-)
Du coup tu vois quoi? Un shell python?
Tu es sûr du chemin du fichier?
Je regarderai ça plus tard, j'ai pas trop le temps :-\
sebsauvage
- Messages postés
- 32840
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
Petit conseil:
Utilisez le module subprocess.
C'est un module qui gère mieux le lancement de programmes extérieurs.
https://docs.python.org/3/library/subprocess.html
Utilisez le module subprocess.
C'est un module qui gère mieux le lancement de programmes extérieurs.
https://docs.python.org/3/library/subprocess.html
Utilisateur anonyme
Bonjour
J'ai une interface graphique avec un bouton et je voudrais associer à ce bouton l'exécution d'une application (python par exemple).
Quand j'écris ça :
os.execl('/usr/local/bin/python2.4', '/home/aurelien/devel/python/test/Main.py')
Mon interface graphique se ferme mais je vois bien que python s'est lancé dans mon terminal, mais sans ouvrir le fichier .py.
J'aimerais qu'il me lance mon appli et qu'il ouvre le fichier passé en argument et qu'il ne ferme pas mon interface graphique.
Merci
J'ai une interface graphique avec un bouton et je voudrais associer à ce bouton l'exécution d'une application (python par exemple).
Quand j'écris ça :
os.execl('/usr/local/bin/python2.4', '/home/aurelien/devel/python/test/Main.py')
Mon interface graphique se ferme mais je vois bien que python s'est lancé dans mon terminal, mais sans ouvrir le fichier .py.
J'aimerais qu'il me lance mon appli et qu'il ouvre le fichier passé en argument et qu'il ne ferme pas mon interface graphique.
Merci
Utilisateur anonyme
Salut Seb
Bon j ai (ré)-utilisé Popen, mais je voudrais avor quelques précisions sur son fonctionnement.
En ce qui concerne les arguments, Popen() permet de lancer l application désirée.
Mais si je veux que l'application exécute un fichier , je dois lui mettre le chemin du fichier dans stdin, via la méthode .communicate(), c'est ça?
Bon j ai (ré)-utilisé Popen, mais je voudrais avor quelques précisions sur son fonctionnement.
En ce qui concerne les arguments, Popen() permet de lancer l application désirée.
Mais si je veux que l'application exécute un fichier , je dois lui mettre le chemin du fichier dans stdin, via la méthode .communicate(), c'est ça?
Pour l'instant j ai encore quelques soucis mais je cherche....
C'est possible de passer le fichier à exécuter avec stdin par un Pipe?