Pensé que la instrucción print
acaba de llamar al método .write() en el objeto sys.stdout
(por defecto).pitthons 'print' declaración no llama al método .write()?
pero después de haber escrito una subclase de esta manera:
import time
class logfile(file):
def __init__(self, *args, **kwargs):
file.__init__(self, *args, **kwargs)
def write(self, logstr):
if logstr[-1] != '\n': logstr += '\n'
super(logfile, self).write(time.strftime('%D-%T ') + str(logstr))
Parece que funciona si creo un objeto logfile
y llame al método write
, pero cuando se trata de cambiar el objeto sys.stdout
a una instancia de la logfile
se aparece como si print
no está llamando al write
. ¿Tal vez writelines
?
El uso de este:
#!/usr/bin/python
from myfile import logfile
import sys
sys.stdout = logfile('somefile', 'w')
print 'this is a test'
sys.stdout.write('this is another test')
Mi archivo de salida 'somefile' contiene:
this is a test
08/10/11-16:59:47 this is another test
se puede ver la primera línea en el archivo de salida es lo que traté de print
y la segunda línea se qué se usó en sys.stdout.write
Pensé print
simplemente llamé write
method- claramente me falta tan mething básico.
¿Ayuda http://stefaanlippens.net/redirect_python_print? – Evpok
'print' tiene su propia referencia a' stdout'. – agf
@Evpok Creo que si intenta redirigir la impresión en lugar de utilizar el registro normal, probablemente no quiera modificar las declaraciones de 'impresión 'preexistentes. – agf