Skip to content

Instantly share code, notes, and snippets.

@cgiacomi
Last active September 19, 2017 08:35
Show Gist options
  • Save cgiacomi/a1144e1a4f6c486da435ca79664044c5 to your computer and use it in GitHub Desktop.
Save cgiacomi/a1144e1a4f6c486da435ca79664044c5 to your computer and use it in GitHub Desktop.
# CREDIT: https://stackoverflow.com/a/2893833/772175
# If you wish to print to both the terminal and to a log file, then I'd suggest using the logging module. You can even define a custom formatter, so logging to the file can purge the 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 prints only to the terminal.
# test.py -l test.out prints to both the terminal and to the file test.out.
# In all cases, the text to the terminal has color codes, while the logging has none.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment