Bonsoir,
Je cherche à executer une commande linux en cliquant sur un bouton, quelle commande dois utiliser?
Merci par avance,
Bonsoir,
Je cherche à executer une commande linux en cliquant sur un bouton, quelle commande dois utiliser?
Merci par avance,
Je vous passe mon code, ca pourra peut-etre vous eclaircir.
Merci par avance
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()
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
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.
Quand je demarre mon PC j'ai bien mon programme qui s'execute, mais NetworkManager ne fonctionne toujours pas.
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()
Je ne comprend pas pourquoi![]()
es-tu sur que la commande os.system se passe bien ?
il ne t'écrit rien dans la console ?
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 :
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part ad="su root -c /usr/sbin/NetworkManager"
Et toujours pas le resultat attendu, la commande NetworkManager ne s'execute pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ad="su root -c NetworkManager"
Alors que si je le fais manuellement cela fonctionne tres bien.
Bizarre, bizarre
![]()
a des fins de tests tu peux exécuter ton script depuis un terminal quelconque en faisant
si il y'a des erreurs ça devrait afficher quelquechose
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 python monScript.py
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".
Arf, c'est pas malin ça.Justement j'ai supprimé le mot de passe root, pour ne plus avoir la demande.
J'ai changé le code pour un test
J'ai bien le message comme quoi NetworkManager est chargé, seulement il ne l'est pas vraiment.
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 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é.
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"![]()
gksu n'est pas lié à la distrib mais plutot à gnome
si tu es sous KDE tu peux tester kdesu
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 !!!
![]()
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager