[docs]class Logedit:
"""This object handles writing text outputs into a log file and to
the screen as well.
Examples
--------
>>> from logedit import Logedit
>>> message1 = 'This message will be logged and displayed.'
>>> message2 = 'This message too.'
>>> message3 = 'This one is Not going to delete previous lines.'
>>> message4 = ('This one copies previous lines and keeps previous log, '
'but saves to new log.')
>>> message5 = 'This one deletes previous lines.'
>>> logname = 'out.log'
>>> logname2 = 'out2.log'
>>> # Create and print lines to a log
>>> log = Logedit(logname)
>>> log.writelog(message1)
This message will be logged and displayed.
>>> log.writelog(message2)
This message too.
>>> log.closelog()
>>> # Edit log without overiding previous lines
>>> log = Logedit(logname, read=logname)
>>> log.writelog(message3)
This one is Not going to delete previous lines.
>>> log.closelog()
>>> # copy a pre-existing log on a new log, and edit it.
>>> log = Logedit(logname2, read=logname)
>>> log.writelog(message4)
This one copies previous lines and keeps previous log, but saves to
new log.
>>> log.closelog()
>>> # overite a pre-existing log
>>> log = Logedit(logname)
>>> log.writelog(message5)
This one deletes previous lines.
>>> log.closelog()
>>> # See the output files: 'out.log' and 'out2.log' to see the results.
Notes
-----
History:
- 2010-07-10 Patricio Cubillos
Initial version
- 2010-11-24 Patricio Cubillos
logedit converted to a class.
"""
def __init__(self, logname, read=None):
"""Creates a new log file with name logname. If a logfile is
specified in read, copies the content from that log.
Parameters
----------
logname : str
The name of the file where to save the log.
read : str
Name of an existing logfile. If specified, its content
will be written to the log.
"""
# Read from previous log
content = []
if read is not None:
try:
old = open(read, 'r')
content = old.readlines()
old.close()
except:
# FINDME: Need to only catch the expected exception
pass
# Initiate log
self.log = open(logname, 'w')
# Append content if there is something
if content != []:
self.log.writelines(content)
[docs] def writelog(self, message, mute=False, end='\n'):
r"""Prints message in the terminal and stores it in the log file.
Parameters
----------
message : str
The message to log.
mute : bool; optional
If True, only log and do not pring. Defaults to False.
end : str; optional
Can be set to '\r' to have the printed line overwritten which
is useful for progress bars. Defaults to '\n'.
"""
# print to screen:
if not mute:
print(message, end=end, flush=True)
# print to file:
print(message, file=self.log, flush=True)
[docs] def closelog(self):
"""Closes an existing log file."""
self.log.close()
[docs] def writeclose(self, message, mute=False, end='\n'):
r"""Print message in terminal and log, then close log.
Parameters
----------
message : str
The message to log.
mute : bool; optional
If True, only log and do not pring. Defaults to False.
end : str; optional
Can be set to '\r' to have the printed line overwritten which
is useful for progress bars. Defaults to '\n'.
"""
self.writelog(message, mute, end)
self.closelog()