2014-07-15 4 views
0

Existe-t-il un moyen de découvrir quel flux un appel d'impression va utiliser?Découvrez quel flux utilise en python

Lorsque j'exécute mon uniteat avec -bv (dans Windows), les instructions d'impression ne s'impriment plus. Cependant, les sorties de mon module de journalisation sont toujours imprimées sur la console.

Ma configuration de l'exploitation forestière est essentiellement:

ch = logging.StreamHandler(stream=sys.stdout) 
    ch.set_name('stdout') 
    addHandler(ch, logging.DEBUG, logger_=logger) 

Il me semble que sys.stdout n'est pas la même chose que la déclaration d'impression après avoir été redirigé par unittest.

Répondre

0

Vous pouvez le faire pour forcer votre déclaration d'impression pour imprimer à sys.stdout:

from __future__ import print_function 
import sys 

print("hello", file=sys.stdout) 
+0

En fait, je ne veux pas l'imprimer sur stdout. J'aime le fait que les instructions d'impression n'apparaissent pas lorsque je cours avec -bv. Je veux juste que mon module de journalisation se comporte de la même manière et qu'il se mette dans le même flux que n'importe quelle impression actuellement définie. – user1287170

0

La question est que unittest réoriente sys.stdout à un StringIOaprès l'exploitation forestière a fait un gestionnaire pour sys.stdout. Avant cela, sys.stdout est égal à sys.__stdout__.

Le problème était que le module de journalisation ne mettait jamais à jour son handle vers sys.stdout. Il continue heureusement à imprimer la référence de flux sys.stdout d'origine. La solution consiste à détecter si sys.stdout est toujours égal à sys.__stdout__. Si ce n'est pas le cas, il a été redirigé et vous devez actualiser le sys.stdout de StreamHandler en supprimant ce gestionnaire et en l'ajoutant à nouveau.

Questions connexes