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 :

click sur un bouton pour commande executée


Sujet :

Tkinter Python

  1. #1
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut click sur un bouton pour commande executée
    Bonsoir,

    Je cherche à executer une commande linux en cliquant sur un bouton, quelle commande dois utiliser?

    Merci par avance,

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Je vous passe mon code, ca pourra peut-etre vous eclaircir.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/env python
     
    import os
    import Tkinter
     
     
    Manager=Tkinter.Tk()
     
    # Presentation du programme
     
    presentation=Tkinter.Label(Manager, text='Mise en route du programme NetworkManager')
    presentation.pack()
     
    # Programme d'execution
     
    def Network():
    	ad="su root -c /usr/sbin/NetworkManager"
    	com=os.system(ad)
     
    # Creation du bouton Network
     
    Bouton=Tkinter.Button(Manager, text='NetworkManager', command=Network, bg='yellow', fg='black')
    Bouton.pack()
    Manager.mainloop()
    Merci par avance

  3. #3
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    il marche ton code, le problème c'est que la commande su a besoin du mot de passe admin

    si tu lance ton script depuis un terminal tu verras que "Password:" apparait lorsque tu cliques et qu'il faut le donner

    il doit être possible de passer automatiquement le mot de passe en faisant un pipe

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Justement j'ai supprimé le mot de passe root, pour ne plus avoir la demande.

    Seulement quand je l'execute, cela ne fonctionne pas et je ne sais pas pourquoi.

    J'ai fais une modif pour l'avoir en mode graphique.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/env python
     
    import os
    import Tkinter
    import tkMessageBox
     
    Manager=Tkinter.Tk()
     
    # Presentation du programme
     
    presentation=Tkinter.Label(Manager, text='Mise en route du programme NetworkManager')
    presentation.pack()
     
    # Programme d'execution
     
    def Network():
    	ad="su root -c /usr/sbin/NetworkManager"
    	com=os.system(ad)
    	tkMessageBox.showinfo("INFO", "Fonctionnement de Network")
     
    # Creation du bouton Network
     
    Bouton=Tkinter.Button(Manager, text='NetworkManager', command=Network, bg='yellow', fg='black')
    Bouton.pack()
    Manager.mainloop()
    Quand je demarre mon PC j'ai bien mon programme qui s'execute, mais NetworkManager ne fonctionne toujours pas.

    Je ne comprend pas pourquoi

  5. #5
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    es-tu sur que la commande os.system se passe bien ?
    il ne t'écrit rien dans la console ?

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Justement je n'ai pas la console.

    Si je ne fais pas le programme graphiquement, la fenetre s'ouvre 1/10e de seconde et se referme aussitot.

    Graphiquement je vois la fenetre, je clik sur OK, mais apparement NetworkManager ne s'execute pas.


    J'ai aussi remplacer le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ad="su root -c /usr/sbin/NetworkManager"
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ad="su root -c NetworkManager"
    Et toujours pas le resultat attendu, la commande NetworkManager ne s'execute pas.

    Alors que si je le fais manuellement cela fonctionne tres bien.

    Bizarre, bizarre


  7. #7
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    a des fins de tests tu peux exécuter ton script depuis un terminal quelconque en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    python monScript.py
    si il y'a des erreurs ça devrait afficher quelquechose

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    En effet le message d'erreur serait utile pour trouver l'origine du problème.

    Quelques pistes supplémentaires :
    - Si l'appel à os.system() s'est bien déroulé, alors la valeur 0 doit être renvoyée. Fais donc un test sur la valeur de retour.
    - Pour demander le mot de passe administrateur en mode graphique, utilise "gksu ta_commande".
    Justement j'ai supprimé le mot de passe root, pour ne plus avoir la demande.
    Arf, c'est pas malin ça.

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    J'ai changé le code pour un test

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/usr/bin/env python
     
    import os
    import Tkinter
    import tkMessageBox
    import sys
     
    Manager=Tkinter.Tk()
     
    # Presentation du programme
     
    presentation=Tkinter.Label(Manager, text='Mise en route du programme NetworkManager')
    presentation.pack()
     
    # Programme d'execution
     
    def Network():
     
    	try :
    		execution=os.system("/usr/sbin/NetworkManager")
    		x=tkMessageBox.showinfo("INFO", "NetworkManager est charge")
    	except :
    		y=tkMessageBox.showinfo("INFO", "Une erreur s'est produite")
     
    # Creation du bouton Network
     
    Bouton=Tkinter.Button(Manager, text='NetworkManager', command=Network, bg='yellow', fg='black')
    Bouton.pack()
    Manager.mainloop()
    J'ai bien le message comme quoi NetworkManager est chargé, seulement il ne l'est pas vraiment.

    j'ai essayé avec su -, avec su - |, sudo, sudo |, su - &, sudo &, rien y fait...

    puis j'ai testé avec gksu, il ne reconnait pas la commande, je suis sur fedora, ca y fait peut-etre quelquechose.

    Surprenant, je ne vois plus qu'une chose, me mettre en root

    Mais comme tu dis c'est pas conseillé, sinon pour le mot de passe c'etait pour tester le programme, il est bien evident que le mot de passe sera remis afin d'etre toujours au mieux securisé.

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut
    Bon j'ai tenté autre chose, et aucun retour d'erreur, c'est vraiment je pense une erreur interne, NetworkManager n'accepte pas d'etre automatisé.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/env python
     
    import os
     
    # Programme d'execution
     
    def testsu():
    	try :
    		su=os.system("su -")
    		return True
    	except :
    		print "Un probleme de droit"
     
    def execution():
    	try:
    		network=os.system("NetworkManager")
    	except:
    		print "Un probleme d'execution"
     
    if testsu()==True:
    	execution()
     
    else :
    	print "Le programme ne peut fonctionner"

  11. #11
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    gksu n'est pas lié à la distrib mais plutot à gnome
    si tu es sous KDE tu peux tester kdesu

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 893
    Points : 7 249
    Points
    7 249
    Par défaut


    je suis bien sous gnome

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Salut
    J'ai le même problème.

    Je suis sous Linux Debian Gnome
    J'ai fait un script simple pour exécuter une commande, mais la commande ne peut s'exécuter qu'en mode admin.
    J'ai mis comme commande os.system("sudo ..."), il me demande un mdp, et ne le reconnait pas (alors que je suis sur que c'est le bon)...
    Si je mais os.system("su ..."), il me met "identifiant inconnu : ma ligne de commande) : il croit que ma ligne de commande est mon mdp !!!


  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Salut,

    Encore une fois, je rappelle que su et sudo s'utilisent en ligne de commande, puisque l'utilisateur doit taper son mot de passe dans le terminal.

    Pourquoi ne pas utiliser gksu ? C'est couramment utilisé sous Debian.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def callback():
        os.system("gksu ta_commande")
        # suite traitement

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    J'essaierais ça. Merci

Discussions similaires

  1. Simulation d'un click sur un bouton de commande
    Par Franck.H dans le forum VB.NET
    Réponses: 1
    Dernier message: 02/04/2014, 10h20
  2. Réponses: 4
    Dernier message: 01/02/2010, 09h50
  3. Réponses: 4
    Dernier message: 23/07/2007, 13h38
  4. PB de click sur un bouton de commande
    Par sam2007 dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/07/2007, 07h42
  5. Réponses: 2
    Dernier message: 12/03/2007, 14h48

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