10
votes

Silence Loggers et impression à l'écran - Python

J'ai un problème avec mon script Python.

Impression des quantités massives de données sur l'écran et j'aimerais empêcher toutes sortes d'impression à l'écran. P>


edit: strong> p>

La bibliothèque que j'utilise est mécanise forte>, et il imite beaucoup de données à l'écran. p>

i Les ont définies sur FALSE sans chance! P>

br.set_debug_redirects(False)
br.set_debug_responses(False)
br.set_debug_http(False)


1 commentaires

Pouvez-vous donner plus d'informations? De quel script parlez-vous? Quel type de données est-il imprimé? Pouvez-vous montrer du code? Utilisez-vous des scripts externes?


3 Réponses :


14
votes

(Basé sur votre 2e modification)

Si vous ne voulez pas désactiver toutes les sorties, vous pouvez essayer d'être spécifique à mécaniser code> lui-même. http://wwwsearch.sourceforge.net/mechanize/ fournit un extrait que j'ai modifié ( Bien que je ne sois pas sûr si cela fonctionnera): p> xxx pré>


Lorsque vous imprimez quelque chose, il passe à l'écran via le sys.stdout code > fichier. Vous pouvez modifier ce fichier sur n'importe quel autre fichier (par exemple, un fichier journal que vous ouvrez) de manière à ce que rien ne soit imprimé à l'écran: p> xxx pré>

Bien sûr, si vous parlez À propos de certaines bibliothèques que vous appelez, il peut s'agir d'une impression sur sys.s.s.s.s.s.s.s. / code>. Heureusement, vous pouvez faire exactement la même chose pour celui-ci (continuant d'en haut): p> xxx pré>

maintenant si, pour une raison quelconque, vous voulez ignorer complètement stdout (ou stardr) et ne le retate plus jamais, vous pouvez définir vos propres classes de type de fichier qui, simplement supprimer les objets: p> xxx pré>

et, pour ajouter à la norme des solutions possibles, voici un Solution qui fonctionne dans des coquilles UNIX: P>

# discards all input (change /dev/null to a file name to keep track of output)
python yourScript.py > /dev/null


2 commentaires

Merci pour la réponse incroyable! désolé pour la faute true / faux


AttributeError: l'objet "Delardeur" n'a aucun attribut 'Flush'



2
votes

Vous pouvez rediriger sys.stsdout et sys.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s. comme objet de la tienne, par exemple xxx

mais je ne recommanderais pas que la simple option est d'utiliser la redirection du niveau d'exploitation par exemple xxx


1 commentaires

Et si vous avez besoin de rediriger aussi stardr (en bash) python myscript.py 2> & 1> out.log



0
votes

Vous pouvez également utiliser le module stressio code>, au lieu de rouler votre propre flux stdout. De temps en temps, le stdout a besoin de plus qu'un Ecrire une méthode code> ( Flush code> est un autre courant), que Stringio va gérer.

import StringIO
import sys

sys.stdout = StringIO.StringIO()


0 commentaires