[python] Aide sur debuggage programme

lonewolf -  
 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 :

:
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:

1 réponse

Anon
 
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:

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
0