Messages with a time stamp

Mark Lawrence breamoreboy at yahoo.co.uk
Sun May 3 05:36:30 EDT 2015


On 03/05/2015 09:22, Cecil Westerhof wrote:
> For testing I want my messages time stamped like:
>      02:06:32: Check that the non recursive variants give the same value from 1000 upto 100000 step 1000
>      02:06:32: Currently at    1000
>      02:06:33: Currently at   11000
>      02:06:35: Currently at   21000
>      02:06:42: Currently at   31000
>      02:06:56: Currently at   41000
>      02:07:18: Currently at   51000
>      02:07:51: Currently at   61000
>      02:08:43: Currently at   71000
>      02:09:49: Currently at   81000
>      02:11:13: Currently at   91000
>      02:13:01: Calculating values OK
>
>      02:13:01: Start with the time needed to calculate 100000 times
>      02:13:01: Timing factorial_iterative         (985): 31
>      02:13:32: Timing factorial_recursive         (985): 55
>      02:14:28: Timing factorial_recursive_old     (985): 56
>      02:15:24: Timing factorial_tail_recursion    (985): 35
>      02:16:00: Timing factorial_tail_recursion_old(985): 40
>
>      02:16:40: Start with the time needed to calculate 1 times
>                No recursive, because without tail recursion you would run out of stack space
>      02:16:40: Timing factorial_iterative         (100000): 3.7705
>      02:16:44: Timing factorial_tail_recursion    (100000): 3.7692
>      02:16:48: Timing factorial_tail_recursion_old(100000): 4.1537
>
> And sometimes I do not want the time shown, to signify that the
> message belongs to the previous message. And sometimes I want no
> newline, because I want to print something behind it. For example the
> time needed to calculate something:
>      02:13:01: Timing factorial_iterative         (985): 31
>
> For this I wrote:
>      ### Have the possibility to give the stream instead of using stdout
>      class TimedMessage:
>          """
>          For printing messages with time prepended before it
>          Has the possibilty to keep time print blank for when several messages
>          are send shortly after eachother.
>          Also the possibilty to stay on the same line when things need to be appended
>          """
>
>          def give_msg(self, message, show_time = True, use_newline = True):
>              """
>              Prints the message to stdout
>              Use show_time = False when you do not want time
>              Use use_newline = False if you do not want a newline
>              """
>
>              if show_time:
>                  time = strftime(self._format)
>              else:
>                  time = self._blank_time
>              formatted_message = time + message
>              if use_newline:
>                  print(formatted_message)
>              else:
>                  sys.stdout.write(formatted_message)
>                  sys.stdout.flush()
>
>          def __init__(self, format = '%H:%M:%S: '):
>              self._format        = format
>              self._blank_time    = ' ' * len(strftime(self._format))
>
> Can I improve on this?
>
> It is shared at:
>      https://github.com/CecilWesterhof/PythonLibrary/blob/master/utilDecebal.py
>

Rather than reinvent the wheel maybe you can pinch something from here 
https://docs.python.org/3/howto/logging-cookbook.html#logging-to-multiple-destinations

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence




More information about the Python-list mailing list