python - Why does this add an extra timestamp when printing? -


i use below code add timestamp print. strange why add 2 timestamp around message.

old_f = sys.stdout  class cfout:     def write(self, x):         old_f.write("%s %s " % (datetime.now().strftime("%d/%m/%y %h:%m:%s:%f"), x))  sys.stdout = cfout() 

when print true. output below.

15/05/2015 05:42:02:121945 true 15/05/2015 05:42:02:121977 

before , after true, there 2 timestamp.
why this? want add timestamp before true.

it's due fact print statement or function performs two calls write, 1 print message ('true') , 1 ending newline or space.

you can see using script following:

import sys datetime import datetime  args = []  class cfout:     def write(self, x):         args.append(x)         sys.__stdout__.write("%s %s " % (datetime.now().strftime("%d/%m/%y %h:%m:%s:%f"), x))   sys.stdout = cfout()  print true print false print 1, 2, 3  sys.stdout = sys.__stdout__ print 'arguments were' print args 

called results in:

$python2 prnt.py  15/05/2015 08:07:03:171182 true 15/05/2015 08:07:03:171392   15/05/2015 08:07:03:171452 false 15/05/2015 08:07:03:171477   15/05/2015 08:07:03:171517 1 15/05/2015 08:07:03:171540   15/05/2015 08:07:03:171561 2 15/05/2015 08:07:03:171581   15/05/2015 08:07:03:171601 3 15/05/2015 08:07:03:171621   arguments ['true', '\n', 'false', '\n', '1', ' ', '2', ' ', '3', '\n'] 

note:

  • 'true' , '\n' arguments 2 calls performed when doing print true.
  • 'false' , '\n' arguments 2 calls performed when doing print false
  • '1', ' ', '2', ' ', '3' , '\n' arguments performed when doing print 1,2,3.

an other way of seeing using exceptions:

>>> print 1, 1/0, 2 1 traceback (most recent call last):   file "<stdin>", line 1, in <module> zerodivisionerror: integer division or modulo 0 

note: 1 still printed though 1/0 raised exception. python doing taking each single portion of stuff print, evaluating , calling write. afterwards calls write(' ') print space due comma , evaluates 1/0 results in exception.

in same way print true first evaluates true, calls write(str(true)) , calls write('\n') add final newline.

if want propoerly attach timestamp messages should use logging module instead.


Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -