Rechercher : dans
Par :

[Python] Lancer une appli via python

Dernière réponse le 8 sep 2006 à 10:51:40 oreilledelest, le 12 mai 2006 à 17:36:19 
 Signaler ce message aux modérateurs

Bonjour
J'utlise la méthode Popen() pour lancer une application, mais je voudrais savoir si on pouvait lancer une application en y joignant un fichier.
Je m'explique :
C'est comme si avec la méthode Popen(), je voulais lancer un programme en python.
Si je met : Popen('python'), il me lance bien pyton dans mon terminal, mais il faut qu'ensuite j'ouvre un fichier .py pour utiliser python.
Je voudrais savoir si on peut directement faire :
Popen('python toto.py'), où un truc du style.
Merci

Meilleures réponses pour « [Python] Lancer une appli via python » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
Gestionnaires de fenêtres X11 VoirGestionnaires de fenêtres AfterStep Blackbox FluxBox FVWM IceWM (Ice Window Manager) Metacity OpenBox Window Maker Sur le réseau Contrairement à certaines solutions propriétaires (Windows et Mac), GNU/Linux offre nativement...
[ssh/X11] Lancer une application avec les droits d'un autre user VoirAvec le forwarding X11, il est possible de lancer des applications graphiques à distance à travers une connexion ssh. Cependant, si vous souhaitez lancer les applications avec les droits d'un autre utilisateur, cela ne fonctionnera pas (par...
Télécharger Pilotes VIA AC'97 VoirLe pilote VIA AC'97 sound driver convient pour toutes les cartes-mères embarquant un chipset VIA. La liste complète des chipsets supportés est la suivante : VIA AC97 codec incorporated into VT82C686A/B South Bridges ( VT82C686A VT82C686B ) VIA...
Télécharger Pilote VIA Rhine Fast Ethernet Adapter VoirLe pilote VIA Rhine Fast Ethernet Adapter supporte les produits suivants : South Bridge integrated VT8251 South Bridge integrated VT8231, VT8233, VT8235 & VT8237 (Rhine & Rhine II) ( VT8237 VT8235 VT8231 VT8233/A/C VT6107 ) VT6105/L/LOM and...
Télécharger VIA Hyperion VoirLes drivers VIA Hyperion Pro conviennent pour n'importe quel chipset VIA, mais ils sont particulièrement recommandés pour les chipsets KT4## series, P4X4## series et plus récents, par exemple : K7 chipsets: KT400, KT400A, KT600, KT880, KM400,...

1

kilian, le 12 mai 2006 à 17:45:24

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:

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)

Répondre à kilian

2

oreilledelest, le 12 mai 2006 à 17:52:02

Bon j'ai essayé ton code, mais il reconnaît la fonction exec comme un mot réservé (au même titre que if ou else).
Donc ça plante.
Y'a un module spécial à importer?

Répondre à oreilledelest

3

kilian, le 12 mai 2006 à 17:54:23

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...)

Répondre à kilian

4

oreilledelest, le 12 mai 2006 à 18:03:57

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.

Répondre à oreilledelest

15

 awalter1, le 8 sep 2006 à 10:51:40

Bonjour,

Je suis dans le même cas que vous.
avez vous trouvé pourquoi le fichier .py passé en argument de execl ne s'exécutait pas ?

merci

Répondre à awalter1

5

kilian, le 12 mai 2006 à 18:12:41

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 :-\

Répondre à kilian

6

oreilledelest, le 15 mai 2006 à 09:32:06

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

Répondre à oreilledelest

7

sebsauvage, le 15 mai 2006 à 09:54:06

Petit conseil:

Utilisez le module subprocess.

C'est un module qui gère mieux le lancement de programmes extérieurs.

http://docs.python.org/lib/module-subprocess.html

Répondre à sebsauvage

11

kilian, le 15 mai 2006 à 11:11:36

Merci pour l'info...

Répondre à kilian

8

oreilledelest, le 15 mai 2006 à 10:17:21

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?

Répondre à oreilledelest

9

sebsauvage, le 15 mai 2006 à 10:54:41
  • +2

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:

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)

Répondre à sebsauvage

10

oreilledelest, le 15 mai 2006 à 11:07:56

Ok je te remercie.
Pour l'instant j ai encore quelques soucis mais je cherche....

Répondre à oreilledelest

12

oreilledelest, le 15 mai 2006 à 12:10:40

Euh encore une petite question...
C'est possible de passer le fichier à exécuter avec stdin par un Pipe?

Répondre à oreilledelest

13

sebsauvage, le 15 mai 2006 à 13:39:01

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().

Répondre à sebsauvage

14

oreilledelest, le 15 mai 2006 à 14:10:23

Ah ben j'étais pas si loin que ça tout à l'heure....
Je vais voir ce que ça donne et comment ça marche.
Merci

Répondre à oreilledelest