Forked from gene1wood/config_file_and_command_line_arguments.py
Created
April 14, 2023 18:55
-
-
Save virtadpt/bad5a98d3d2379df683b27c06b0193e9 to your computer and use it in GitHub Desktop.
Revisions
-
gene1wood revised this gist
Feb 25, 2014 . 1 changed file with 3 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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", 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 -
gene1wood revised this gist
Feb 25, 2014 . 1 changed file with 4 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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)])) return result if __name__=='__main__': -
gene1wood created this gist
Feb 25, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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)