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 :

Copytree, récupérer code erreur


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut Copytree, récupérer code erreur
    bonjour à tous.
    Voici ma question, en espérant que vous saurez la résoudre

    J'ai fait un simple fichier .py pour effectuer des backups de dossier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    source = 'D:\python\dossier'
    destination = "D:\python\dossier\test"
    copyfile = copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
    assez simple ^^
    Mais voila j'aimerais un peu complexifier l'affaire.
    Quand la copie a été effectuée sans erreur j'aimerais qu'il envoi un mail par le biais d'un serveur smtp local.

    encore faisable ça (si vous avez un bon code pour smtp ça m'intéresse car sur internet on trouve mille code différent).

    Voila ou ça se complique.
    En cas d'erreur (exemple le dossier existe déjà, un fichier n'est pas lisible, ou autre) tout le script s'arrete et il déclare une erreur.

    J'aimerais que cette erreur soit reportée dans un mail qu'il enverrais pour me prévenir que la copie sait mal passée.

    Je résume

    - Copie d'un dossier
    - si ok > envoyer un simple mail (pour dire copie réussie)
    - si erreur > envoyer un mail avec si possible l'erreur (ou au moins un mail pour me dire que ça n'a pas été)

    Ca parait simple mais dès que une erreur à la copie se produit tout le script s'arrête et je ne connais pas assez copytree pour palier à ce problème.
    Je sais juste que quand la copie se passe bien il sort comme notation None
    De la je peu faire un if copytree == none (envoyer le mail)
    mais je sais pas aller plus loin dès qu'il y a une erreur.

    D'avance merci pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Le script s'arrête car une exception est levée. Il faut l'intercepter avec un try/except.
    Un exemple (Python 3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import sys, traceback
    ...
    try:
        copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
    except Exception:
        message_text = ''.join(traceback.format_exception(*sys.exc_info()))
    else: # no exception occurred
        message_text = 'copytree successful\nsource: {0}\ndestination: {1}\n'.format(source,destination)
     
    print(message_text)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    nickel,
    Presque tout fonctionne parfaitement.

    Il reste un petit problème.
    Je sors l'erreur si il y en a une dans un fichier texte (info.txt)
    Vu que je travaille sous windows FR l'erreur de copie se note en francais avec des accès en genre :
    info.txt
    -------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Traceback (most recent call last):
      File "copie.py", line 47, in <module>
     WindowsError: [Error 183] Impossible de créer un fichier déjà existant: 'test'
    Donc aucun problème.
    Je veux envoyer le fichier txt par mail (enfin lire le contenu et le renvoyer en texte par mail)
    Mais la le problème apparait (un problème avec les accents etc ...)

    Comment soit dire qu'il ne doit pas prendre en compte les accents ou alors peut être mieux.
    Faire un code pour re travailler le fichier info.txt en supprimant tout les accents.
    Genre cherche remplace tout les é,è etc ... par du code unicode.

    D'avance merci beaucoup pour votre aide
    Je suis déjà bien avancé.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Il doit s'agir d'un erreur d'encodage. A quel moment l'erreur apparait ? A la lecture du fichier ou à l'envoi du mail ?

    Regarde du côté des méthodes encode et decode des strings, ou, pour l'email, du côté de email.charset et email.encoders.

    Note qu'il n'est peut-être pas nécessaire de stocker le message dans un fichier; tu pourrais garder le(s) string(s) en mémoire et les inclure dans le mail sans passer par un fichier.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    Je travaille avec la mémoire pour le mail.
    Je sors juste dans un fichier texte pour faire office de log.

    Dans le fichier texte il n'y a aucun problème il encode bien en utf-8 car les accents sont enregistré.
    A mon avis c'est du coté du mail qu'il a plutôt du mal.

    J'enregistre l'erreur de copytree dans cette variable : message_text

    Voici les erreurs qu'il m'affiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Traceback (most recent call last):
      File "copie.py", line 132, in <module>
        server.sendmail(FROM, TO, message2)
      File "D:\Softs\Python\Lib\smtplib.py", line 718, in sendmail
        (code,resp) = self.data(msg)
      File "D:\Softs\Python\Lib\smtplib.py", line 484, in data
        self.send(q)
      File "D:\Softs\Python\Lib\smtplib.py", line 305, in send
        s = s.encode("ascii")
    UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 492: ordinal not in range(128)
    Merci beaucoup pour votre aide.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Je m'y connais pas assez pour te dire quelle est la façon propre d'envoyer un email qui n'est pas en ASCII 7 bit (il faut jouer avec les type MIME sans doute ?).

    Peut-être quelqu'un d'autre va te répondre. En attendant, tu peux essayer d'encoder ton message avant d'appeler sendmail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    server.sendmail(FROM, TO, message2.encode('ascii', 'xmlcharrefreplace'))
    Tu peux aussi essayer 'ignore', 'replace' et 'backslashreplace' au lieu de 'xmlcharrefreplace'.

    On dirait que sendmail attend un string unicode; il faudra peut-être jouer avec encode/decode pour arriver à quelque chose. C'est pas très propre la gestion de l'unicode en Python 2.x...

Discussions similaires

  1. makefile récupérer code erreur
    Par boris_couturier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 24/05/2011, 17h47
  2. Récupérer code erreur avec Firebird et Zeoslib
    Par seabs dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/06/2010, 16h28
  3. Récupérer code erreur dans une log
    Par clluciole dans le forum Développement
    Réponses: 1
    Dernier message: 03/08/2009, 15h20
  4. Récupérer le code erreur du convert
    Par ALEX731 dans le forum Sybase
    Réponses: 7
    Dernier message: 03/04/2007, 10h05
  5. [Mail] récupérer les code erreurs de mail()
    Par Djakisback dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2006, 17h19

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