Bonjour,
le titre dit tout!!!
Version imprimable
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:
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 videCode:
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 logCitation:
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'ai modifier mon script mais sans succès
et le fichier logCode:
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))
Citation:
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 videCode:
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:
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:
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 :P