Use optparse to parse arguments and logging setup
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Usage:
# ./test_argparse.py -d -v subtest -a 1 --arg2 2
#
"""Python script contains logging setup and argparse"""
import argparse
import logging
import os
import sys
CURRENT_PATH = os.path.dirname(os.path.abspath(__file__))
SCRIPT_NAME = os.path.basename(__file__)
def log_init(root_path, name="app", debug=False, verbose=False):
"""Set up global logs"""
log_format = "%(asctime)s %(process)s %(levelname)s [-] %(message)s"
log_level = logging.INFO
log_path = os.path.join(root_path, "log")
if not os.path.exists(log_path):
os.makedirs(log_path)
if debug:
log_level = logging.DEBUG
log_file = os.path.join(log_path, "%s.debug.log" % name)
else:
log_file = os.path.join(log_path, "%s.log" % name)
if verbose:
logging.basicConfig(
format=log_format,
level=log_level)
else:
logging.basicConfig(
format=log_format,
level=log_level,
filename=log_file)
def parse_sys_args(argv):
"""Parses commaond-line arguments"""
parser = argparse.ArgumentParser(
description="Demo for argparse")
parser.add_argument(
"-d", "--debug", action="store_true", dest="debug",
default=False, help="Enable debug message.")
parser.add_argument(
"-v", "--verbose", action="store_true", dest="verbose",
default=False, help="Show message in standard output.")
subparsers = parser.add_subparsers(title="Avaliable commands")
# Subparsers
parser_sub = subparsers.add_parser("subtest")
parser_sub.add_argument(
"-a", "--arg1", dest="arg1", required=True,
help="Demo for subparsers argument1")
parser_sub.add_argument(
"--arg2", dest="arg2", required=True,
help="Demo for subparsers argument1")
parser_sub.set_defaults(func=test_parser_sub)
return parser.parse_args(argv[1:])
def test_parser_sub(args):
logging.info("arg1 is %s" % args.arg1)
logging.debug("arg2 is %s" % args.arg2)
def main():
args = parse_sys_args(sys.argv)
log_init(CURRENT_PATH, SCRIPT_NAME, args.debug, args.verbose)
args.func(args)
if __name__ == "__main__":
main()