我编写了一个自定义子模块,以在相似的API项目中重用相同的代码。
在我的子模块中,我具有以下内容:
# sub.py
from argparse import ArgumentParser
arg_parser = ArgumentParser()
arg_parser.add_argument("-s", "--silent", help="silent mode", action="store_true")
script_args = arg_parser.parse_args()
if not script_args.silent:
# If the silent flag isn't passed then add logging.
#logger.addHandler(console_handler)
在主脚本中通过add_argument()
添加其他参数的最佳方法是什么?
# main.py
import sub
# This still works:
if sub.script_args.silent:
# Some code
# I tried this, but it doesn't work:
sub.arg_parser.add_argument("-t", "--test", help="test mode", action="store_true")
sub.script_args.parse_args()
# The script doesn't know about -t.
答案 0 :(得分:1)
您可以使用 parse_known_args 函数(partial parsing)。
例如:
# sub.py
from argparse import ArgumentParser
arg_parser = ArgumentParser()
arg_parser.add_argument("-s", "--silent", help="silent mode", action="store_true")
partial_script_args = arg_parser.parse_known_args()[0]
print("silent") if partial_script_args.silent else print("not silent")
# main.py
import sub
# This still works:
if sub.partial_script_args.silent:
pass
sub.arg_parser.add_argument("-t", "--test", help="test mode", action="store_true")
full_script_args = sub.arg_parser.parse_args()
print("test") if full_script_args.test else print("not test")
请注意文档中的警告:
警告: Prefix matching规则适用于parse_known_args()。解析器可能会消耗一个选项,即使它只是其已知选项之一的前缀,而不是将其保留在其余参数列表中。