Skip to content

Instantly share code, notes, and snippets.

@fnl
Created June 28, 2015 12:16
Show Gist options
  • Save fnl/f1485ab33ae657299808 to your computer and use it in GitHub Desktop.
Save fnl/f1485ab33ae657299808 to your computer and use it in GitHub Desktop.
Python 3 script/command-line skeleton
#!/usr/bin/env python3
"""
Description
"""
from argparse import ArgumentParser
import logging
import os
import sys
from somewhere import main
__author__ = 'First Last'
__version__ = '0.0'
epilog = 'system (default) encoding: {}'.format(sys.getdefaultencoding())
parser = ArgumentParser(
usage='%(prog)s [options] [FILE ...]',
description=__doc__, epilog=epilog,
prog=os.path.basename(sys.argv[0])
)
parser.add_argument('files', metavar='FILE', nargs='*', type=open,
help='input file(s); if absent, read from <STDIN>')
parser.add_argument('--version', action='version', version=__version__)
parser.add_argument('--verbose', '-v', action='count', default=0,
help='increase log level [WARN]')
parser.add_argument('--quiet', '-q', action='count', default=0,
help='decrease log level [WARN]')
parser.add_argument('--logfile', metavar='FILE',
help='log to file instead of <STDERR>')
args = parser.parse_args()
files = args.files if args.files else [sys.stdin]
# Logging setup
log_adjust = max(min(args.quiet - args.verbose, 2), -2) * 10
logging.basicConfig(filename=args.logfile, level=logging.WARNING + log_adjust,
format='%(levelname)-8s %(module) 10s: %(funcName)s %(message)s')
logging.info('verbosity increased')
logging.debug('verbosity increased')
for input_stream in files:
try:
main(input_stream)
except:
logging.exception("unexpected program error")
parser.error("unexpected program error")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment