[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
- Programme demarrage windows - Guide
- Citizen code python - Accueil - Outils
- Programme word gratuit - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - 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