我已閱讀關於如何定義,解析和運行多個subparsers運行某事像解析多個subparsers,但隨着全球參數
tool.py func_a -a 12 func_b -b 15 input.txt output.txt
^-- main parser args
^--------------- subparser b
^---------------------------- subparser a
他們通常建議是這樣了不少的問題和答案:
def func_a(args):
pass
def func_b(args):
pass
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Define subparsers
subp_a = subparsers.add_parser(func_a.__name__)
subp_a.set_defaults(func=func_a)
subp_a.add_argument('-a')
subp_b = subparsers.add_parser(func_b.__name__)
subp_b.set_defaults(func=func_b)
subp_b.add_argument('-b')
# Define global parameters
parser.add_argument('input', type=argparse.FileType('r'))
parser.add_argument('output', type=argparse.FileType('wb', 0))
# Parse and run through all arguments
rest = sys.argv[1:]
while rest:
args, rest = parser.parse_known_args(rest)
args.func(args)
但是,這種實現有一個問題:參數input
和output
是爲主分析器定義的,應該只使用一次。但是,每次調用parser.parse_known_args(rest)
都需要設置值,因此將其從rest
中刪除。
這意味着第一次調用parse_known_args
會檢索值,並且每個後續調用都會由於缺少參數而失敗。
是否有解決方案來克服這個問題,而不需要手動將值複製到rest
列表中?