2015-10-09 12 views
7

Uso una libreria e non riesco a modificarne l'origine. C'è una funzione nella libreria che devo chiamare, e quando la chiamo, rende questo file che voglio; tuttavia, allo stesso tempo, stampa questo avviso sullo schermo centinaia di volte. L'avvertimento è sempre lo stesso.Prevenire la stringa in corso di stampa python

Warning during export : no corresponding GDSII layer found for process and purpose

Questa è una specie di fastidioso e mi rende la stampa di tutto per output/error inutile, perché appena viene invaso da questo stupido avvertimento.

So come reindirizzare stdout/stderr semplicemente assegnandogli un file diverso. È possibile controllare semplicemente cosa verrà scritto su stdout/stderr, scartarlo se è quella stringa, altrimenti stamparlo?

+1

C'è un motivo per cui non è possibile modificare la libreria? – intboolstring

+0

Hai provato [-W] (https://docs.python.org/2/using/cmdline.html#cmdoption-W) flag? – sam

+0

Sì, non è la mia libreria, ed è in esecuzione dal server dei proprietari. È anche nel processo di essere commercializzato. –

risposta

8

Vorrei usare qualcosa di simile ...

3.x

import sys 
from _io import TextIOWrapper 

class StdoutFilter(TextIOWrapper): 

    def __init__(self, stdout): 
     super().__init__(stdout) 
     self.stdout = stdout 

    def write(self, output): 
     if output != "don't write this": 
      self.stdout.write(output) 

sys.stdout = StdoutFilter(sys.stdout) 

print("hello, world!") 
print("don't write this") 

sys.stdout = sys.__stdout__ 

2.x

from StringIO import StringIO 

class StdoutFilter(StringIO): 

    def __init__(self, stdout): 
     StringIO.__init__(self, stdout) 
     self.stdout = stdout 

Speranza che aiuta!

+0

Grazie per quello, certamente aiuta! Sembra che ci sia uno strano problema nel farlo funzionare per python 2.7. Ottengo l'errore: 'attributo errore: leggibile' a' super() .__ init __ (stdout) '. Qualche idea, perché? Una ricerca su Google non sembra rivelare molto. –

+1

@ Jean-Luc Prego. Vedi l'aggiornamento per la versione 2.x! – cdonts

Problemi correlati