Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save virtadpt/bad5a98d3d2379df683b27c06b0193e9 to your computer and use it in GitHub Desktop.
Save virtadpt/bad5a98d3d2379df683b27c06b0193e9 to your computer and use it in GitHub Desktop.

Revisions

  1. @gene1wood gene1wood revised this gist Feb 25, 2014. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion config_file_and_command_line_arguments.py
    Original file line number Diff line number Diff line change
    @@ -3,6 +3,7 @@
    import ConfigParser
    import argparse
    import logging
    import os

    def type_loglevel(level):
    try:
    @@ -21,7 +22,6 @@ def type_loglevel(level):
    )
    conf_parser.add_argument("-c", "--config",
    help="Specify a configuration file",
    default=os.path.expanduser('~/.example.conf'),
    metavar="FILE")
    args, remaining_argv = conf_parser.parse_known_args()
    defaults = {
    @@ -59,3 +59,5 @@ def type_loglevel(level):
    help='Log level verbosity')
    args = parser.parse_args(remaining_argv)
    logging.basicConfig(level=args.loglevel)

    print args
  2. @gene1wood gene1wood revised this gist Feb 25, 2014. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions config_file_and_command_line_arguments.py
    Original file line number Diff line number Diff line change
    @@ -8,8 +8,10 @@ def type_loglevel(level):
    try:
    result = getattr(logging, level.upper())
    except AttributeError:
    raise argparse.ArgumentTypeError("'%s' is not a valid log level. Please use %s" % \
    (level, [x for x in logging._levelNames.keys() if isinstance(x, str)]))
    raise argparse.ArgumentTypeError("'%s' is not a valid log level. Please use %s" %
    (level,
    [x for x in logging._levelNames.keys()
    if isinstance(x, str)]))
    return result

    if __name__=='__main__':
  3. @gene1wood gene1wood created this gist Feb 25, 2014.
    59 changes: 59 additions & 0 deletions config_file_and_command_line_arguments.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    #!/usr/bin/env python

    import ConfigParser
    import argparse
    import logging

    def type_loglevel(level):
    try:
    result = getattr(logging, level.upper())
    except AttributeError:
    raise argparse.ArgumentTypeError("'%s' is not a valid log level. Please use %s" % \
    (level, [x for x in logging._levelNames.keys() if isinstance(x, str)]))
    return result

    if __name__=='__main__':
    conf_parser = argparse.ArgumentParser(
    # Turn off help, so we print all options in response to -h
    add_help=False
    )
    conf_parser.add_argument("-c", "--config",
    help="Specify a configuration file",
    default=os.path.expanduser('~/.example.conf'),
    metavar="FILE")
    args, remaining_argv = conf_parser.parse_known_args()
    defaults = {
    "foo" : "default foo value",
    "bar" : "default bar value",
    "baz" : "default baz value",
    "loglevel" : "INFO"
    }
    if args.config:
    config = ConfigParser.SafeConfigParser(defaults)
    config.read([args.config])
    defaults = dict(config.items("Defaults"))

    for key in defaults.keys():
    if "\n" in defaults[key]:
    defaults[key] = [x.strip() for x in defaults[key].splitlines()]

    # Don't suppress add_help here so it will handle -h
    parser = argparse.ArgumentParser(
    # Inherit options from config_parser
    parents=[conf_parser],
    # print script description with -h/--help
    description=__doc__,
    # Don't mess with format of description
    formatter_class=argparse.RawDescriptionHelpFormatter,
    )
    parser.set_defaults(**defaults)
    parser.add_argument('-f', '--foo',
    help="Foo")
    parser.add_argument('-b', '--bar',
    help="Bar")
    parser.add_argument('-z', '--baz',
    help="Baz")
    parser.add_argument('-l', '--loglevel', type=type_loglevel,
    help='Log level verbosity')
    args = parser.parse_args(remaining_argv)
    logging.basicConfig(level=args.loglevel)