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 :

sauvegarder la console dans un fichier log


Sujet :

Python

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut sauvegarder la console dans un fichier log
    Bonjour,
    le titre dit tout!!!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    'Le titre dit tout'...Permet moi d'en douter. Plus on est précis, et plus on a de chance d'avoir la réponse qui nous convient...
    Ceci dit je pense que la bibliotheque 'subprocess' te conviendra
    have fun

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    s'il s'agit juste de rediriger les canaux standard et des erreurs vers un fichier texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sys
    out = open('out.log','w')
    sys.stdout = out
    sys.stderr = out
    # ... ton traitement ici ...
    # on restaure les valeurs initiales
    sys.stdout = sys.__stdout__
    sys.stderr = sys.__stderr__

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    Bonjour,
    en fait je souhaite creer un fichier log ou je sauvegarde tout ce que je vois sur la console lors de l'exécution de mon script .
    j'ai jeté un coup d'oeil au module LOGGING, mai ce que je ne comprends pas c'est comment l'integrer a mon script

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Il me semble que ce que Kango t'as écris devrait fonctionner

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    voila ce que j'ai fais
    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
     
    import aTester
    import unittest
    import logging
    import time
    import sys
     
     
     
    timestamp = time.strftime("%Y%m%d", time.gmtime())
    logfile = "test_aTester_" + timestamp + ".log"
     
    out = open(logfile,'w')
    sys.stdout = out
    sys.stderr = out
     
     
     
     
     
    class TestResultat(unittest.TestCase):
        """teste reussite"""
     
     
        def setUp(self):
            """setUpDoc"""
     
            self.obj = aTester.Calcul()
     
     
        def testAdd(self):
            """testAddDoc"""
            result = 11
     
            self.assertEqual(self.obj.add(5, 6),result)
     
        def testDiv(self):
            """testDivDoc"""
            result = 2
            self.assertEqual(self.obj.div(6, 3),result)
    class BadInputCalcul(unittest.TestCase):
        """should fail"""
     
        def testNoParamToAdd(self):
            """Calcul should fail with  input Type error"""
            self.assertRaises(TypeError,aTester.Calcul.add)
     
     
    suite = unittest.TestSuite()  # construit une batterie de teste
    suite = unittest.makeSuite(TestResultat)    #ajout a la batterie
    suite.addTest(unittest.makeSuite(BadInputCalcul))    #ajout a la batterie
    unittest.TextTestRunner(verbosity=3).run(suite)
    sys.stdout = sys.__stdout__
    sys.stderr = sys.__stderr__
    mais le fichier log est vide

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    par rapport a mon exemple, voila le resultat du lancement du script
    testAddDoc ... FAIL
    testDivDoc ... ok
    Calcul should fail with input Type error ... ok

    ======================================================================
    FAIL: testAddDoc
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "D:\Sauvegarde\MesProjets\Python\EclipseTestingProject\src\test_aTester.py", line 34, in testAdd
    self.assertEqual(self.obj.add(5, 6),result)
    AssertionError: None != 11

    ----------------------------------------------------------------------
    Ran 3 tests in 0.001s

    FAILED (failures=1)
    j'aimerais bien garder une trace de ce resultat dans un fichier log

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    j'ai modifier mon script mais sans succès

    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
    import aTester
    import unittest
    import logging
    import time
    import sys
     
     
     
     
     
    timestamp = time.strftime("%Y%m%d", time.gmtime())
    LOGFILE = "test_aTester_" + timestamp + ".log"
     
    # Initialize logs
    loglev = logging.DEBUG # debug and logging.DEBUG or logging.INFO
    logfmt = "%(asctime)s.%(msecs)03d: %(message)s"
    logging.basicConfig(level=loglev,
                            format=logfmt,
                            datefmt="%H:%M:%S",
                            filename=LOGFILE, filemode='wb')
    # Add console output to stdout for the time being
    conlog = logging.StreamHandler(sys.stdout)
    conlog.setFormatter(logging.Formatter("%(message)s"))
     
    log = logging.getLogger("test_aTester")
    log.addHandler(conlog)
    log.info("%s" % time.asctime())
    llname = logging.getLevelName(loglev)
    log.debug("Log file='%s'" % LOGFILE)
     
     
     
     
     
    class TestResultat(unittest.TestCase):
        """teste reussite"""
     
     
        def setUp(self):
            """setUpDoc"""
     
            self.obj = aTester.Calcul()
     
     
        def testAdd(self):
            """testAddDoc"""
            result = 11
     
            self.assertEqual(self.obj.add(5, 6),result)
     
        def testDiv(self):
            """testDivDoc"""
            result = 2
            self.assertEqual(self.obj.div(6, 3),result)
    class BadInputCalcul(unittest.TestCase):
        """should fail"""
     
        def testNoParamToAdd(self):
            """Calcul should fail with  input Type error"""
            self.assertRaises(TypeError,aTester.Calcul.add)
     
     
    suite = unittest.TestSuite()  # construit une batterie de teste
    suite = unittest.makeSuite(TestResultat)    #ajout a la batterie
    suite.addTest(unittest.makeSuite(BadInputCalcul))    #ajout a la batterie
    log.info(suite)
    log.info(unittest.TextTestRunner(verbosity=3).run(suite))
    et le fichier log
    11:59:48.098: Fri Jul 30 11:59:48 2010
    11:59:48.099: Log file='test_aTester_20100730.log'
    11:59:48.099: <unittest.TestSuite tests=[<__main__.TestResultat testMethod=testAdd>, <__main__.TestResultat testMethod=testDiv>, <unittest.TestSuite tests=[<__main__.BadInputCalcul testMethod=testNoParamToAdd>]>]>
    11:59:48.101: <unittest._TextTestResult run=3 errors=0 failures=1>

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    Personne
    alors j'ai repris l'exemple des sortie standart
    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
    
    class TestResultat(unittest.TestCase):
        """teste reussite"""
        def setUp(self):
            """setUpDoc"""
            self.obj = aTester.Calcul()
    
        def testAdd(self):
            """testAddDoc"""
            result = 11
            self.assertEqual(self.obj.add(5, 6),result)
    
        def testDiv(self):
            """testDivDoc"""
            result = 2
            self.assertEqual(self.obj.div(6, 3),result)
    
    out = open('resultat.log','w')
    sys.stdout = out
    sys.stderr = out
    
    suite = unittest.TestSuite()  # construit une batterie de teste
    suite = unittest.makeSuite(TestResultat)    #ajout a la batterie
    
    
    unittest.TextTestRunner(verbosity=3).run(suite)
    out.close()
    sys.stdout = sys.__stdout__
    sys.stderr = sys.__stderr__
    mais le fichier resultat.log est toujours vide

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Un exemple simple.

    Je veux recevoir les résultats de la console (ici le résultat de print "bonjour") dans mon fichier log, selon l'exemple tiré par kango

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import sys
     
    save=sys.stdout
    out = open('out.log','w')
    sys.stdout=out
    print "bonjour"
    sys.stdout=save
    out.close()

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    justement je n'est pas de print dans mes methodes, c'est le module unittest grace a Stream.writer qui ecrit dans la console

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Salut
    Tu n'es pas loin du but:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    suite = unittest.TestSuite()  # construit une batterie de teste
    suite = unittest.makeSuite(TestResultat)    #ajout a la batterie
    with open('test.log', 'w') as f:
             unittest.TextTestRunner(f, verbosity=3).run(suite)
    "Il suffit" d'ajouter le stream en argument de TestTestRunner.
    - W
    PS: Python 2.7 hein!!!
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    merci ca fonctionne parfaitement,
    merci de votre aide a tous et plus particulièrement wiztricks, j'espere qu'un jour je pourrai aider a mon tour des jeunes newbie comme moi

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    il me reste plus qu'a négocié mon CDI pour le mois de septembre

Discussions similaires

  1. Sauvegarder console dans un fichier
    Par stabii dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/02/2013, 00h40
  2. Sauvegarde des requêtes SOAP dans un fichier log
    Par death_style dans le forum Services Web
    Réponses: 1
    Dernier message: 28/12/2011, 14h28
  3. Sauver les sorties consoles dans un fichier log
    Par Balbuzard dans le forum Logging
    Réponses: 4
    Dernier message: 30/03/2009, 00h48
  4. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55
  5. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23

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