Bonjour,
le titre dit tout!!!
Bonjour,
le titre dit tout!!!
'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
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__
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
Il me semble que ce que Kango t'as écris devrait fonctionner
voila ce que j'ai fais
mais le fichier log est vide
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__
par rapport a mon exemple, voila le resultat du lancement du script
j'aimerais bien garder une trace de ce resultat dans un fichier logtestAddDoc ... 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'ai modifier mon script mais sans succès
et le fichier log
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))
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>
Personne
alors j'ai repris l'exemple des sortie standart
mais le fichier resultat.log est toujours vide
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__
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()
justement je n'est pas de print dans mes methodes, c'est le module unittest grace a Stream.writer qui ecrit dans la console
Salut
Tu n'es pas loin du but:
"Il suffit" d'ajouter le stream en argument de TestTestRunner.
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)
- W
PS: Python 2.7 hein!!!
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![]()
il me reste plus qu'a négocié mon CDI pour le mois de septembre![]()
Partager