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

Python Discussion :

threading.Timer stopper avec ouverture de fenetre


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut threading.Timer stopper avec ouverture de fenetre
    Bonjour,

    Je cale un peu sur un petit problème.
    En fait j'ai une fonction qui tourne en boucle toutes les x secondes pour pinguer un serveur et si celui-ci ne répond plus j'ouvre une fenêtre où l'utilisateur peut encoder quelque chose qui est sauvé avec l'heure système.
    Pour faire ça pas de problèmes mais le problème est que quand la fenêtre s'ouvre, la fonction arrête de pinguer en boucle

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    def MyTimer(isOpen,tempo = float(time)):
     
        #si linux   
        if sys.platform == "linux2":
            lPing = subprocess.Popen(["ping","-c", "1 ", ip ],  
    					    stdout = subprocess.PIPE, 
    					    stderr = subprocess.PIPE) 
        elif sys.platform == "win32":
            lPing = subprocess.Popen(["ping","-n", "1 ", ip ],  
    					    stdout = subprocess.PIPE, 
    					    stderr = subprocess.PIPE) 
     
        sLigne, erreur = lPing.communicate()
        print sLigne
        #si linux   
        if sys.platform == "linux2":
            info_reg = info_reg = re.search(r'(\d+) packets transmitted',sLigne,re.M)
            transmis = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'(\d+) received',sLigne,re.M)
            received = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'(\d+)% packet loss',sLigne,re.M)
            loss = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'time (\d+)ms',sLigne,re.M)
            time = int(info_reg.group(1))
     
        now = datetime.datetime.now()
        #si l'expression régulière a donné un résultat
        if transmis > 0:
            isDown = False
            if received == 0:
                isDown = True
    	    #si le serveur répond après avoir été down et qu'il y a un fichier à uploader alors upload
    	    #recupere les parametres du fichier 
            if isDown == 'False':
                isOpen = False
                if(os.path.exists(pathLoc) and os.path.getsize(pathLoc) > 0):
                    transport = paramiko.Transport((ip, port)) 
                    transport.connect(username = user, password = passwd) 
                    sftp = paramiko.SFTPClient.from_transport(transport) 
                    sftp.put(pathLoc,pathServ) 
                    sftp.close() 
                    transport.close() 
                    #print 'Upload done.' 
                    os.remove(pathLoc)                  #supprime fichier
            else:
    	        if(received == 0 and isOpen == False):
    	            print now.strftime("%d/%m/%YT%H:%M:%S")
    	            fen_matricule(racine)
    	            isOpen = True
        else:
            received = 0
            if(received == 0 and isOpen == False):
                print now.strftime("%d/%m/%YT%H:%M:%S")
                fen_matricule(racine)
                isOpen = True
     
        threading.Timer(tempo, MyTimer, [isOpen,tempo]).start()
     
    def fen_matricule(racine):
     
    	fond=Tkinter.Canvas(racine, width=300, height=200, background='darkgray')
    	fond.pack()
    	texte=Tkinter.Label(fond, text="Matricule", fg="black")
    	texte.pack(side=Tkinter.LEFT)
    	valsaisir=Tkinter.StringVar() #variable to get value
    	saisie=Tkinter.Entry(textvariable=valsaisir, width=30)
    	saisie.pack()
    	bouton=Tkinter.Button(racine, text="OK", command=lambda: save(valsaisir.get(),racine,saisie)).pack(side=Tkinter.BOTTOM)
    	"""
            bouton=Tkinter.Button(racine, text="Quitter", command=racine.quit)
            bouton.pack(side=Tkinter.BOTTOM)
            """
    	racine.mainloop()
    	MyTimer(isOpen,float(time))
    J'ai besoin que ça continue de pinguer tout en laissant cette fenêtre ouverte et si il répond de nouveau je ferme la fenêtre et préviens l'utilisateur que le serveur est de nouveau dispo


    Merci de votre aide

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    mainloop() est bloquant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root = Tkinter.Tk()
    print 'avant mainloop'
    root.mainloop()
    print 'apres mainloop'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            if(received == 0 and isOpen == False):
                print now.strftime("%d/%m/%YT%H:%M:%S")
                fen_matricule(racine)
    Lorsque vous utilisez le module threading avec Tkinter vous devez bien séparer les deux et faire en sorte que threading ne modifie pas directement l'interface graphique.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Quelques notes:

    Attention à l'indentation : 4 espaces et non tabulation. Surtout pas de mélange, ce qui est le cas dans votre code.

    Pourquoi utiliser un Canvas comme conteneur ? racine est suffisant.

    Je ne vois pas trop l'utilité de la classe Variable ici. Un simple saisie.get() est suffisant.

    Quel intérêt de sauvegarder des instances ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save(valsaisir.get(),racine,saisie)
    Vous avez regrouper ce que vous aviez appris lors de vos précédentes questions et c'est bien. Mais les 'briques' ne sont pas dans le bon sens.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Tout d'abord merci de tes réponses et de remarquer que le forum porte ses fruits avec un noob comme moi

    1) je passe saisie à la fonction save pour pouvoir remettre à vide le textbox de la popup. Je n'ai effectivement pas besoin de passer racine

    2)Je ne comprends pas en quoi mes briques sont dans le mauvais ordre

    3)Comment faire pour que le lancement de ma fenêtre n'affecte pas mon thread qui vas pinguer le serveur

    Je débute donc je galère

    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Je pense avoir compris pourquoi mes briques sont dans le mauvais ordre.
    Il faudrait qu'en premier je lance l'application mais que la fenêtre soit cachée
    et à coté de ça je lance mon thread qui ping et une fois que le serveur ne répond plus, je rend visible la fenêtre.

    J'ai bien compris? par contre pour l'appliquer

    Merci

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Je vous donne l'exemple dans une autre de vos questions: .withdraw()/.deiconify()
    Le plus simple c'est de créer la fenêtre (racine = Tkinter.Tk()), lancer le thread puis de mettre l'event loop (racine.mainloop())
    Il ne vous reste plus qu'a faire 'communiquer' les deux.
    Attention:
    Comme je le dis plus haut il est déconseillé de modifier l'interface graphique directement à partir du thread.
    Évitez aussi d'utiliser la classe Variable Tkinter pour faire un callback (Mais l'idée c'est bien un callback ).

    @+
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Merci de ton aide

    J'ai appliqué ce que tu m'as montré pour mon cas.
    ma fenêtre s'ouvre bien et ça continue de pinguer mais le problème est que la fenêtre ne répond 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    racine=Tkinter.Tk()
     
    isDown = False
    isOpen = False
    def MyTimer(isOpen,tempo = float(time)):
     
        #si linux   
        if sys.platform == "linux2":
            lPing = subprocess.Popen(["ping","-c", "1 ", ip ],  
    					    stdout = subprocess.PIPE, 
    					    stderr = subprocess.PIPE) 
        elif sys.platform == "win32":
            lPing = subprocess.Popen(["ping","-n", "1 ", ip ],  
    					    stdout = subprocess.PIPE, 
    					    stderr = subprocess.PIPE) 
     
        sLigne, erreur = lPing.communicate()
        print sLigne
        transmis = 0
        received = 0
        loss = 100
        time = 0
        #si linux   
        if sys.platform == "linux2":
            info_reg = info_reg = re.search(r'(\d+) packets transmitted',sLigne,re.M)
            if info_reg:
                transmis = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'(\d+) received',sLigne,re.M)
            if info_reg:
                received = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'(\d+)% packet loss',sLigne,re.M)
            if info_reg:
                loss = int(info_reg.group(1))
                if loss == 100:
                    loss = 1
            info_reg = info_reg = re.search(r'time (\d+)ms',sLigne,re.M)
            if info_reg:
                time = int(info_reg.group(1))
            #info_reg = info_reg = re.search(r'(\d+) packets transmitted, (\d+) received, (.+)% packet loss, time (\d+)ms',sLigne,re.M)
        elif sys.platform == "win32":
            info_reg = info_reg = re.search(r'envoy\Ds = (\d+)',sLigne,re.M)
            if info_reg:
                transmis = int(info_reg.group(1))
            info_reg = info_reg = re.search(r're\Dus = (\d+)',sLigne,re.M)
            if info_reg:
                received = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'perte (\d+)%',sLigne,re.M)
            if info_reg:
                loss = int(info_reg.group(1))
            info_reg = info_reg = re.search(r'Moyenne = (\d+)ms',sLigne,re.M)
            if info_reg:
                time = int(info_reg.group(1))
            #info_reg = info_reg = re.search(r'Paquets : envoyés = (\d+), reçus = (\d+), perdus = (\d+) perte (.+)%',sLigne,re.M)
     
        now = datetime.datetime.now()
        #si l'expression régulière a donné un résultat
        if transmis > 0:
            """transmis = int(info_reg.group(1))
            received = int(info_reg.group(2))
            loss = int(info_reg.group(3))
            time = int(info_reg.group(4))"""
            isDown = False
            if received == 0:
                isDown = True
    	    #si le serveur répond après avoir été down et qu'il y a un fichier à uploader alors upload
    	    #recupere les parametres du fichier 
            if isDown == False:
                showroot()
                #Ferme la fenêtre pour encoder les pointages locales
                if isOpen == True:
                    #close window
                    #racine.destroy()
                    hideme()
                    #fen_upload(racine)
     
     
                isOpen = False
                if(os.path.exists(pathLoc) and os.path.getsize(pathLoc) > 0):
                    transport = paramiko.Transport((ip, port)) 
                    transport.connect(username = user, password = passwd) 
                    sftp = paramiko.SFTPClient.from_transport(transport) 
                    sftp.put(pathLoc,pathServ) 
                    sftp.close() 
                    transport.close() 
                    #print 'Upload done.' 
                    os.remove(pathLoc)                  #supprime fichier
            else:
    	        if(received == 0 and isOpen == False):
    	            print now.strftime("%d/%m/%YT%H:%M:%S")
    	            #fen_matricule(racine)
    	            showroot()
    	            isOpen = True
        else:
            if(received == 0 and isOpen == False):
                print now.strftime("%d/%m/%YT%H:%M:%S")
                #fen_matricule(racine)
                showroot()
                isOpen = True
     
        threading.Timer(tempo, MyTimer, [isOpen,tempo]).start()
    def showroot():
        racine.deiconify()
     
    def hideme():
        racine.withdraw()
        MyTimer(isOpen,float(time))
     
    fond=Tkinter.Canvas(racine, width=300, height=200, background='darkgray')
    fond.pack()
    texte=Tkinter.Label(fond, text="Matricule", fg="black")
    texte.pack(side=Tkinter.LEFT)
    valsaisir=Tkinter.StringVar() #variable to get value
    saisie=Tkinter.Entry(textvariable=valsaisir, width=30)
    saisie.pack()
    bouton=Tkinter.Button(racine, text="OK", command=lambda: save(valsaisir.get(),racine,saisie)).pack(side=Tkinter.BOTTOM)
    """
    bouton=Tkinter.Button(racine, text="Quitter", command=racine.quit)
    bouton.pack(side=Tkinter.BOTTOM)
    """
    hideme()
    racine.mainloop()
    Merci de votre aide parce j'en soupe de ce projet

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Vous devriez tester vos résultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        if transmis > 0:
            isDown = False
            if received == 0: # < ICI
                isDown = True
            print isDown # < Et ICI
            if isDown == False:
                showroot() # <<<
                print isOpen # <<<
                if isOpen == True:
                    hideme()
    De plus (hors question) ceci vous semble t'il normal ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def hideme():
        racine.withdraw()
        MyTimer(isOpen,1) # <
    Plus ce que j'ai déjà aborder.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Me revoilà et j'ai avancé.
    Il me reste un problème simple mais que je n'arrive pas à résoudre.
    Pour résumé, quand le serveur ne répond pas j'ouvre une fenêtre tout en continuant de pinguer. Une fois que celui-ci répond, je dois afficher une popup pour dire qu'il répond de nouveau.
    J'ai donc décidé d'afficher ou cacher certains éléments en fonction de l'appel. ça fonctionne correctement sous ubuntu mais sous windows seven, au moment où il doit changer l'apparence de la fenêtre ça ne répond plus et rien ne se passe.

    De plus quand je teste le chemin avec:
    pathLoc = "C:\Utilisateurs\x\Bureau\test.txt"
    if(os.path.exists(pathLoc) == False):

    il me met l'erreur: IOerror: Errno2 no such file or directory in C:\\Utilisateurs\\x\\Bureau\\test.txt

    Voici le code que j'ai un peu simplifié

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    racine=Tkinter.Tk()
    texte=Tkinter.Label(racine, text="Matricule", fg="black")
    bouton=Tkinter.Button(racine, text="OK", command=lambda: save(valsaisir.get(),racine,saisie))
    boutonESC=Tkinter.Button(racine, text="Fermer", command=racine.quit())
    valsaisir=Tkinter.StringVar() #variable to get value
    saisie=Tkinter.Entry(textvariable=valsaisir, width=30)
    cpt=0
    def MyTimer:
        cpt = int(cpt)+1
        if(cpt > 2):
            #racine.withdraw()
            isOpen = False
            showroot(1)
            #cpt = 0
            print "connecte"
        else:
            print now.strftime("%d/%m/%YT%H:%M:%S")
            #fen_matricule(racine)
            showroot(0)
            isOpen = True
     
        threading.Timer(tempo, MyTimer, [cpt,isOpen,tempo]).start()
     
    def showroot(param):
        if param == 0:
            texte.config(text='Matricule')
            bouton.pack(side=Tkinter.BOTTOM)
            boutonESC.pack_forget()
        else:
            texte.config(text='Le serveur répond de nouveau')
            bouton.pack_forget()
            boutonESC.pack(side=Tkinter.BOTTOM)
            saisie.pack_forget()
        racine.deiconify()
     
    def hideme():
        racine.withdraw()
        MyTimer(cpt,isOpen,float(time))
     
    hideme()
    racine.mainloop()
    Si quelqu'un a une solution de pourquoi ça fonctionne sur un os et pas l'autre ça me sauverai pcq ile ne me reste plus que ça à gérer.

    Merci

  10. #10
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Il me semble (pas de seven @home, que du tux) que sous Seven c'est Desktop.
    Pour avoir le répertoire utilisateur os.path.expanduser('~') donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if os.path.isdir(os.path.join(os.path.expanduser('~'), Desktop):
        pathLoc = os.path.join(os.path.expanduser('~'), Desktop)
    etc...
    Il est aussi possible de tester l'environnement pour cela (sys.platform).

    @+

    Note: Vous devriez mettre vos fonctions avant le GUI.
    Merci d'utiliser le forum pour les questions techniques.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Je sais tester s'il s'agit de windows mais pathloc est chargé au départ à partir d'un fichier INI donc je n'arrive pas à appliquer à mon cas

    Comment est ce que je peux tester si le fichier existe en sachant qu'il se trouve dans pathLoc = "C:\Users\x\Desktop\test.txt"
    S'il n'existe pas je el crée en faisant : file(pathLoc, 'w')

    Et pourquoi double-t-il '\' quand il m'affiche l'erreur?



    Merci de votre aide

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Développeur python
    Inscrit en
    juillet 2006
    Messages
    3 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur python
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2006
    Messages : 3 158
    Points : 5 930
    Points
    5 930
    Par défaut
    voir google : os.path.isfile
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Merci mais si je viens ici c'est parce que la doc que j'ai trouvée n'a pas répondu à mon problème.

    J'ai un chemin qui existe et os.path.isfile() me retourne false
    Pour info quand je mets un chemin linux je n'ai pas de problèmes.
    J'ai essayé de doubler les "\" mais ça ne change rien

  14. #14
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par bender86 Voir le message
    Merci mais si je viens ici c'est parce que la doc que j'ai trouvée n'a pas répondu à mon problème.

    J'ai un chemin qui existe et os.path.isfile() me retourne false
    Pour info quand je mets un chemin linux je n'ai pas de problèmes.
    J'ai essayé de doubler les "\" mais ça ne change rien
    Les chemins dans Python sont reconnus quand tu mets des "/" (windows ou nunux)
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouverture nouvelle fenetre avec method POST
    Par jeeps64 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/04/2012, 17h11
  2. threading.Timer stopper avec ouverture de fenetre
    Par bender86 dans le forum Tkinter
    Réponses: 0
    Dernier message: 31/07/2011, 14h29
  3. [WD12] Ouverture de fenetres avec tables
    Par PAUL87 dans le forum WinDev
    Réponses: 19
    Dernier message: 29/01/2010, 13h48
  4. probleme d'ouverture de fenetre avec visual studio
    Par saifoune dans le forum Visual Studio
    Réponses: 0
    Dernier message: 02/04/2009, 15h33
  5. [TP]Liaison série avec TP7 dans fenêtre DOS W2000
    Par Alain81 dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 14/06/2003, 00h43

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