If you want to print to both the terminal and the log file, I would suggest using a logging module. You can even define a custom formatter, so writing to a file can clear terminal codes:
import optparse import logging def error(string): return '\033[31;1m' + string + '\033[0m' def standout(string): return '\033[34;1m' + string + '\033[0m' def plain(string): return string.replace('\033[34;1m','').replace('\033[31;1m','').replace('\033[0m','') if __name__=='__main__': logging.basicConfig(level=logging.DEBUG, format='%(message)s', filemode='w') logger=logging.getLogger(__name__) def parse_options(): usage = 'usage: %prog [Options]' parser = optparse.OptionParser() parser.add_option('-l', '--logfile', dest='logfile', help='use log file') opt,args = parser.parse_args() return opt,args opt,args=parse_options() if opt.logfile: class MyFormatter(logging.Formatter): def format(self,record): return plain(record.msg) fh = logging.FileHandler(opt.logfile) fh.setLevel(logging.INFO) formatter = MyFormatter('%(message)s') fh.setFormatter(formatter) logging.getLogger('').addHandler(fh) logger.info(error('There was a problem with the program')) logger.info("This is normal " + standout("and this stands out"))
test.py is displayed only on the terminal.
test.py -l test.out prints both the terminal and the test.out file.
In all cases, the text on the terminal has color codes, but the journal does not.
unutbu
source share