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

Tkinter Python Discussion :

tkinter + os.execal


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 18
    Points
    18
    Par défaut tkinter + os.execal
    Bonjour je cherche à crée un bouton qui stop apache mon code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    from tkinter import *
    import random
    import os 
     
    def stop():
        os.execl(sudo apachectl stop)
     
     
    Mafenetre = Tk()
    Mafenetre.title('apache')
    Mafenetre.geometry('300x100+400+400')
     
    boutonstop = Button(Mafenetre, text ='stop', command = stop)
    boutonstop.pack(side = LEFT, padx = 5, pady = 5)
    Mafenetre.mainloop()

    Mais l'erreur suivante s'affiche, avez vous une solution ?
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'boutonstop' is not defined


    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    L'erreur que vous montrez correspond à une instruction passée à la console Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> boutonstop
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'boutonstop' is not defined
    Le script que vous avez posté remonte l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    wz ! python wbar_5.py
      File "wbar_5.py", line 6
        os.execl(sudo apachectl stop)
                              ^
    SyntaxError: invalid syntax
    essentiellement parce que la commande à passer à os.execl se fait via des chaînes de caractères (et pas sous cette forme là).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    j'ai essayé de le mettre en chaîne de caractères et aussi avec des virgule mais cela n’aboutis pas.
    from tkinter import *
    import os


    def stop():
    os.execl("gksudo,apachectl,stop")



    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()

    Mafenetre.title('apache')
    Mafenetre.geometry('300x100+400+400')

    # Création d'un widget Button (bouton stop)
    Boutonstop = Button(Mafenetre, text ='Lancer', command = stop)
    # Positionnement du widget avec la méthode pack()
    Boutonstop.pack(side = LEFT, padx = 5, pady = 5)

    # Création d'un widget Button (bouton Quitter)
    BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
    BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)

    Texte = StringVar()
    top()


    LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')
    LabelResultat.pack(side = LEFT, padx = 5, pady = 5)

    Mafenetre.mainloop()
    >>> from tkinter import *
    >>> import os
    >>>
    >>>
    >>> def stop():
    ... os.execl("gksudo,apachectl,stop")
    ...
    >>>
    ...
    >>> # Création de la fenêtre principale (main window)
    ... Mafenetre = Tk()
    >>>
    >>> Mafenetre.title('apache')
    ''
    >>> Mafenetre.geometry('300x100+400+400')
    ''
    >>>
    >>> # Création d'un widget Button (bouton stop)
    ... Boutonstop = Button(Mafenetre, text ='Lancer', command = stop)
    >>> # Positionnement du widget avec la méthode pack()
    ... Boutonstop.pack(side = LEFT, padx = 5, pady = 5)
    >>>
    >>> # Création d'un widget Button (bouton Quitter)
    ... BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
    >>> BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)
    >>>
    >>> Texte = StringVar()
    >>> top()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'top' is not defined
    >>>
    >>>
    >>> LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')
    >>> LabelResultat.pack(side = LEFT, padx = 5, pady = 5)
    >>>
    >>> Mafenetre.mainloop()Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python3.4/tkinter/__init__.py", line 1490, in __call__
    return self.func(*args)
    File "<stdin>", line 2, in stop
    File "/usr/lib/python3.4/os.py", line 489, in execl
    execv(file, args)
    ValueError: execv() arg 2 must not be empty
    Pouvez vous me donnez un exemple pour résoudre:
    execv(file, args)
    ValueError: execv() arg 2 must not be empty
    et si j'appelle un bash (placé dans le home et à la racine avec les commandes dedans) avec
    os.execl(test.sh,stop)
    il me répond
    >>>
    >>> Mafenetre.mainloop()Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python3.4/tkinter/__init__.py", line 1490, in __call__
    return self.func(*args)
    File "<stdin>", line 2, in stop
    NameError: name 'test' is not define

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    La première chose à faire est d'arriver à lancer la commande à exécuter.
    Les fonctions os.exec* sont "deprecated": si vous ne savez pas les utiliser, pas la peine de perdre votre temps à essayer de les faire marcher.

    Utilisez le module subprocess à la place.
    Lisez la documentation et choisissez la méthode adaptée à votre cas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Avec le module subprocess mon script marche parfaitement
    script final:
    from tkinter import *
    import os


    def stop():
    os.system('gksudo apachectl stop')



    # Création de la fenêtre principale (main window)
    Mafenetre = Tk()

    Mafenetre.title('apache')
    Mafenetre.geometry('300x100+400+400')

    # Création d'un widget Button (bouton stop)
    Boutonstop = Button(Mafenetre, text ='Lancer', command = stop)
    # Positionnement du widget avec la méthode pack()
    Boutonstop.pack(side = LEFT, padx = 5, pady = 5)

    # Création d'un widget Button (bouton Quitter)
    BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
    BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)

    Texte = StringVar()
    top()


    LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')
    LabelResultat.pack(side = LEFT, padx = 5, pady = 5)

    Mafenetre.mainloop()

    Merci W

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par geos66 Voir le message
    Avec le module subprocess mon script marche parfaitement
    Pourquoi ne l'utilises-tu pas alors ?


    Note: Pour le code ce sont les balises CODE pas QUOTE.

Discussions similaires

  1. [RUNTIME][EXEC]
    Par adrien1977 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 30/09/2009, 16h28
  2. [Applet][Exec programme] Est ce possible sur un serveur ?
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 31
    Dernier message: 11/05/2004, 14h15
  3. [Free Pascal] Comportement de Exec
    Par néo333 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 01/11/2003, 17h46
  4. Comment utiliser Site Exec sous FTP
    Par phig dans le forum Développement
    Réponses: 2
    Dernier message: 12/08/2003, 17h11
  5. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 15h15

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