[python] Aide sur debuggage programme
lonewolf
-
Anon -
Anon -
Bonjour,
J'ai un petit souci.
J'ai crée un script qui permet de générer des horaires d'utilisations pour un pc, grâce a os.system et la commande dos : net user /times.
Le script fonctionne à partir du moment ou il y a une heure d'entrée mais malgré le if qui qui dit que 's'il n'y a pas d'horaire il doit tout ouvrir', cette commande ne fonctionne pas et me met l'erreur suivante :
Je pense comprendre que la variable dysfonctionne mais ce qui est bizarre c'est que pour les autres if, ca ne pose pas de problème.
De plus, je dois avoir les yeux bouchés car ca fait une heure que je regarde et que je ne vois pas ce qui cloche. Je fais donc appel à vous avec un regard neuf pour m'aider à debbuger.
Voici mon code :
Merci a tous
Amicalement
J'ai un petit souci.
J'ai crée un script qui permet de générer des horaires d'utilisations pour un pc, grâce a os.system et la commande dos : net user /times.
Le script fonctionne à partir du moment ou il y a une heure d'entrée mais malgré le if qui qui dit que 's'il n'y a pas d'horaire il doit tout ouvrir', cette commande ne fonctionne pas et me met l'erreur suivante :
: Exception in Tkinter callback Traceback (most recent call last): File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__ return self.func(*args) File "C:/Documents and Settings/s.pillot/Mes documents/Pyton prog/horairesfinaux.py", line 50, in nom a=os.system(commande) UnboundLocalError: local variable 'commande' referenced before assignment
Je pense comprendre que la variable dysfonctionne mais ce qui est bizarre c'est que pour les autres if, ca ne pose pas de problème.
De plus, je dois avoir les yeux bouchés car ca fait une heure que je regarde et que je ne vois pas ce qui cloche. Je fais donc appel à vous avec un regard neuf pour m'aider à debbuger.
Voici mon code :
# -*- coding: cp1252 -*- from Tkinter import * import os from ScrolledText import * #definition du traitement def nom(): global b nom=ent1.get() lundi=ent2.get() mardi=ent3.get() mercredi=ent4.get() jeudi=ent5.get() vendredi=ent6.get() samedi=ent7.get() dimanche=ent8.get() # seulement le lundi if lundi: commande="net user "+nom+" /times:L," +lundi+" 2>rep.txt" #print commande # seulement mardi if mardi: commande="net user "+nom+" /times:Ma,"+mardi+" 2>rep.txt" #print commande # seulement mercredi if mercredi: commande="net user "+nom+" /times:Me,"+mercredi+" 2>rep.txt" #print commande # seulement jeudi if jeudi: commande="net user "+nom+" /times:j,"+jeudi+" 2>rep.txt" #print commande # seulement vendredi if vendredi: commande="net user "+nom+" /times:v,"+vendredi+" 2>rep.txt" #print commande # seulement samedi if samedi: commande="net user "+nom+" /times:s,"+samedi+" 2>rep.txt" #print commande # seulement dimanche if dimanche: commande="net user "+nom+" /times:d,"+dimanche+" 2>rep.txt" #print commande # si pas de données if not lundi and not mardi and mercredi and jeudi and vendredi and samedi and dimanche: commande="net user "+nom+" /times:all 2>rep.txt" print commande a=os.system(commande) b=open('rep.txt','r') result() #définition reinitialiser def reinitialiser(): global b nom=ent1.get() commandere="net user "+nom+" /times:all 2>rep.txt" #print commandere a=os.system(commandere) b=open('rep.txt','r') result() def result(): fen1=Toplevel() fen1.title("Résultat") texte = ScrolledText(fen1, width = 75, height = 5, font = "Arial 10", relief = "groove") texte.pack() #Ecriture des données texte.config(state = NORMAL) #Permettre l'écriture texte.insert("1.0", b.readlines()) #Gestion de l'insertin des lignes #1 = 1ere ligne 0 = 1er caractere de la ligne texte.config(state = DISABLED) #Interdire les modifications #Remettre à zero les entrées ent1.delete(0,END) ent2.delete(0,END) ent3.delete(0,END) ent4.delete(0,END) ent5.delete(0,END) ent6.delete(0,END) ent7.delete(0,END) ent8.delete(0,END) b.close() bou4=Button(fen1,text='Fermer',command=fen1.destroy) bou4.pack() #Fenêtre principal fen=Tk() fen.title('Horaires V1.0 par S.Pillot') text1=Label(fen,text='Entrer le nom de la session a limiter : ',fg='red') text1.grid(column=0,row=0) ent1=Entry(fen) ent1.grid(column=1,row=0) text2=Label(fen,text='Entrer les heures permises selon le modèle suivant : 13:00-20:00') text2.grid() text3=Label(fen,text='Lundi',fg='red') text3.grid(column=0,row=3) ent2=Entry(fen) ent2.grid(column=1,row=3) text4=Label(fen,text='Mardi',fg='red') text4.grid(column=0,row=4) ent3=Entry(fen) ent3.grid(column=1,row=4) text5=Label(fen,text='Mercredi',fg='red') text5.grid(column=0,row=5) ent4=Entry(fen) ent4.grid(column=1,row=5) text6=Label(fen,text='Jeudi',fg='red') text6.grid(column=0,row=6) ent5=Entry(fen) ent5.grid(column=1,row=6) text7=Label(fen,text='Vendredi',fg='red') text7.grid(column=0,row=7) ent6=Entry(fen) ent6.grid(column=1,row=7) text8=Label(fen,text='Samedi',fg='red') text8.grid(column=0,row=8) ent7=Entry(fen) ent7.grid(column=1,row=8) text9=Label(fen,text='Dimanche',fg='red') text9.grid(column=0,row=9) ent8=Entry(fen) ent8.grid(column=1,row=9) bou1=Button(fen,text='Envoyer',command=nom) bou1.grid(column=2,row=10) bou3=Button(fen,text='Reinitialiser',command=reinitialiser) bou3.grid(column=0,row=10) bou2=Button(fen,text=' Quitter ',command=fen.destroy) bou2.grid(column=2,row=12) fen.mainloop()
Merci a tous
Amicalement
A voir également:
- [python] Aide sur debuggage programme
- Citizen code python avis - Accueil - Outils
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
1 réponse
Bonjour !
"if not lundi and not mardi and mercredi and jeudi and vendredi and samedi and dimanche:"
Tu as oublié les "not" à partir de mercredi, cette suite de "if" c'est pas très beau .
Je crois que entry.get() renvoie le contenu de entry, donc en écrivant "if entry.get()" tu regardes si entry.get()== True, ce que tu veux faire(je crois) c'est regarder si le champ est rempli, il faut donc utiliser
"if entry.get() != "": "
En plus si l'utilisateur entre des données dans lundi et mardi , par exemple, seul mardi sera sauvegardé .
Si j'étais toi je la remplacerais par:
"if not lundi and not mardi and mercredi and jeudi and vendredi and samedi and dimanche:"
Tu as oublié les "not" à partir de mercredi, cette suite de "if" c'est pas très beau .
Je crois que entry.get() renvoie le contenu de entry, donc en écrivant "if entry.get()" tu regardes si entry.get()== True, ce que tu veux faire(je crois) c'est regarder si le champ est rempli, il faut donc utiliser
"if entry.get() != "": "
En plus si l'utilisateur entre des données dans lundi et mardi , par exemple, seul mardi sera sauvegardé .
Si j'étais toi je la remplacerais par:
dic_entries = {} #Création des "Entry" puis ajout de chacune dans dic_entries avec pour valeur la commande voulue si le champ est rempli, par exemple: dic_entries[entry_samedi] = " /times:s," #Tu devrais donner des noms plus explicites, du genre entry_samedi plutot que ent6, #Idem pour les text1,text2 etc : label_text_lundi , label_text_mardi ... def nom(): for entry in dic_entries: #Pour chaque champ d'entrée if entry.get() != "": #Si ce champ n'est pas vide resultats_commande[entry] = os.system("net user"+nom+dic_entries[entry]+entry.get()+" 2>rep.txt" else: pass if len(commande) == 0: #Si aucun champ n'était rempli . resultats_commande[champ_vide] = os.system("truc") else: pass