我正在创建一个python脚本,该脚本将XML格式的日志文件解析为SQLite数据库文件。有几种不同类型的日志文件,默认情况下,脚本只处理给定文件夹中的process-*.xml
文件。使用argparser
选项,用户可以控制应包括哪些日志文件。
argparser = argparse.ArgumentParser(description="Process log files into a SQLite database.")
argparser.add_argument("--control", action=argparse.BooleanOptionalAction, default=False, help="parse control-*.xml into the database")
argparser.add_argument("--dream", action=argparse.BooleanOptionalAction, default=False, help="parse dream-*.xml into the database")
argparser.add_argument("--error", action=argparse.BooleanOptionalAction, default=False, help="parse error-*.xml into the database")
argparser.add_argument("--lis", action=argparse.BooleanOptionalAction, default=False, help="parse lis-*.xml into the database")
argparser.add_argument("--pass", action=argparse.BooleanOptionalAction, default=False, help="parse pass-*.xml into the database", dest="pass_xml") # The default .pass not valid attribute
argparser.add_argument("--process", action=argparse.BooleanOptionalAction, default=True, help="parse process-*.xml into the database")
argparser.add_argument("--uif", action=argparse.BooleanOptionalAction, default=False, help="parse uif-*.xml into the database")
还有一些与此无关的附加参数,为了可读性,我没有在这里包含这些参数。
我想添加一个--all
参数,它将上述所有参数设置为True
。如果例如--all --no-control
将除control
之外的所有自变量设置为True
,则会更好,CCD_7将保留为False
。这怎么可能是复杂的呢?
简单明了的解决方案怎么样?
argparser.add_argument("--all", action=argparse.store_true, default=False, help="All of the above")
...
if args.all:
args.control = True
args.dream = True
args.error = True
...
添加:
要使--all --no-foo
工作,请从.add_argument
s中删除default=False
,然后如果未指定,则将该值设置为None
,如果指定了--no-foo
,则将其设置为CCD13。然后使用
if args.all:
if args.foo == None: args.foo = True
if args.bar == None: args.bar = True
...
这样,只有在未使用--no-foo
选项显式设置为False
的情况下,参数才会设置为True
。