IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec Python Discussion :

Lancer une application depuis une fenêtre gtk


Sujet :

GTK+ avec Python

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Lancer une application depuis une fenêtre gtk
    Bonjour,

    je souhaite lancer "gnuplot" pour qu'il exécute un fichier script et exporte une image.
    La fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     os.system("gnuplot /home/cyrille/pythGtk+/temp.gp")
    fonctionne en mode console et aussi si je l'exécute avant de créer l'environement graphique. Mais si je la lance comme procédure liée à une fenêtre ça marche pas (pas de message d'erreur mais le fichier n'est pas créé).
    J'ai essayé avec des commandes similaires (popen, call ...) et c'est pareil.
    En fait je crois que c'est l'écriture du fichier qui pose pb, en effet un
    renvoie la réponse attendue et rend la main à l'application.

    SVP aidez-moi, je ne comprends pas ce qui se passe ????
    Merci

  2. #2
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Salut
    Pour cela il faut un thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class RunComponent(Thread):
    et pour lancer une application dans cette classe, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = subprocess.Popen(self.path+self.command,shell=True)
    Si cela peut t'aider ...

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Les fonctions g_spawn_async_* doivent exister en pygtk, tu peux peut être les utiliser ? (cf http://www.gtk.org/api/2.6/glib/glib...Processes.html )

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Les fonctions g_spawn_async_* doivent exister en pygtk, tu peux peut être les utiliser ? (cf http://www.gtk.org/api/2.6/glib/glib...Processes.html )
    Justement je ne suis pas sûr, il n'existe pas de pyGlib (juste pyGObject et pyGTK).

    Le but de la glib est de combler les manques de la bibliothèques standard du C, par exemple au niveau de la gestion des processus. Problème que n'a pas python !

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Si la seule solution pour lancer un processus externe de manière asynchrone, c'est de lancer un thread et de faire un popen, alors avoir g_spawn_async disponible en python se justifie Les fonctions de la glib ont aussi l'avantage de pouvoir invoquer un callback lorsque le processus qu'elles ont lancées meurt, je sais pas si c'estp ossible avec les fonctions fournies par python.

  6. #6
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    ... Les fonctions de la glib ont aussi l'avantage de pouvoir invoquer un callback lorsque le processus qu'elles ont lancées meurt, je sais pas si c'est possible avec les fonctions fournies par python.
    Pour ma part, je ne suis pas arrivé à le faire en python, j'ai du bricoler l'exécution d'une commande type 'ps' pour savoir si mes process lancés étaient finis ou pas. Si il y avait une solution je serais mille fois preneur.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    Pour ma part, je ne suis pas arrivé à le faire en python, j'ai du bricoler l'exécution d'une commande type 'ps' pour savoir si mes process lancés étaient finis ou pas. Si il y avait une solution je serais mille fois preneur.

    http://www.pygtk.org/docs/pygobject/...hild-watch-add
    Et gobject.spawn_async se trouve juste en dessous.

  8. #8
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Pour cela il faut un thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class RunComponent(Thread):
    et pour lancer une application dans cette classe, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = subprocess.Popen(self.path+self.command,shell=True)
    Si j'ai bien compris, il faut que je lance un nouveau processus.
    Voilà l'endroit de mon script où je peux le mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class plotscript:
          def tracer(self,widget,commande):
    Là je veux lancer gnuplot avec un fichier ce qui s'écrit en bash:
    Comment faire ?

  9. #9
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    http://www.pygtk.org/docs/pygobject/...hild-watch-add
    Et gobject.spawn_async se trouve juste en dessous.
    Le pb était que mon IHM en gtk était figée tant que le fils n'avait pas fini.
    J'essaierai avec cette méthode.

  10. #10
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par cyrilleG Voir le message
    Là je veux lancer gnuplot avec un fichier ce qui s'écrit en bash:
    Comment faire ?
    je ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = subprocess.Popen(<path de gnuplot>+"gnuplot fichier.gp",shell=True)

  11. #11
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour le conseil.
    Ca marche pour appeler 2 fois Gnuplot mais après l'appel ne fonctionne plus.
    Je pense que c'est la gestion des processus ("threads") qui n'est pas correcte.
    Quelqu'un connaît-il un tuto sur ce thème ?
    Merci

  12. #12
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    En fait sans à marcher sans thread avec un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.Popen(["gnuplot","fichier"],shell=True)
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Windows Phone 8] [Debutant] Lancer le navigateur avec une url depuis une application
    Par krizentherm dans le forum Windows Phone
    Réponses: 3
    Dernier message: 06/04/2014, 12h39
  2. lancer une application depuis une application
    Par walimed dans le forum Android
    Réponses: 2
    Dernier message: 28/02/2012, 10h50
  3. lancer une recherche depuis une application
    Par Fahmi06 dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/01/2007, 11h46
  4. Lancer une réplication depuis une application
    Par Raton dans le forum Réplications
    Réponses: 1
    Dernier message: 29/09/2006, 14h28
  5. Réponses: 5
    Dernier message: 06/07/2006, 10h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo