Il 04/06/2013 17:03, Federico Figus ha scritto:
Ciao,

l'override dell'istruzione print non è possibile in python 2.x, ma lo è in python 3.x. Per aggirare il problema potresti definire un file-like object che possieda almeno il metodo write, al cui interno ci implementi la logica di scritura, ad esempio:

import sys
_stdout = sys.stdout

class FaskeStdout(object):

can_write = 1

def write(self, data):
if self.can_write:
_stdout.write(data)

sys.stdout = FakeStdout()

print "stampa sullo stdout"
sys.stdout.can_write = 0
print "non stampa sullo stdout"

La seconda soluzione sarebbe creare la tua funzione print con un alias (e.g. print_log()) e modidicare tutto il codice con un semplice find&replace, così potrai controllare la meglio tutta questa parte in futuro.
ho pensato a fare un overloading perchè non e' semplice cambiare tutti i print con un find&replace.
la riga

   print "ciao mondo"

dovrebbe diventare

   print_log("ciao mondo")

e l'ultima parentesi tonda chiusa non saprei proprio come inserirla...
Con il file-like object del print ha funzionato, adesso ho un flag che funziona così:

   if not flag:
        print "Verbose is OFF!!!"
        from overloadprint import *
        sys.stdout=OverloadPrint()


dove overloading.py contiene il codice:

   class OverloadPrint():
        def write(self, text):
            pass


Saluti,
Federico F.


_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a