如果存在,如何使用parser.parse_known_args()
方法,然后根据需要的 args 添加--lport
和--rport
args 。--prox
# just add --prox arg now
non_int = argparse.ArgumentParser(description="stackoverflow question",
usage="%(prog)s [-h] [--prox --lport port --rport port]")
non_int.add_argument('--prox', action='store_true',
help='Flag to turn on proxy, requires additional args lport and rport')
opts, rem_args = non_int.parse_known_args()
if opts.prox:
non_int.add_argument('--lport', required=True, type=int, help='Listen Port.')
non_int.add_argument('--rport', required=True, type=int, help='Proxy port.')
# use options and namespace from first parsing
non_int.parse_args(rem_args, namespace = opts)
另请记住,您可以opts
在第二次解析剩余参数时提供第一次解析后生成的命名空间。这样,最终,在完成所有解析之后,您将拥有一个包含所有选项的命名空间。
缺点:
- 如果
--prox
不存在,则命名空间中甚至不存在其他两个依赖选项。尽管根据您的用例,如果--prox
不存在,其他选项会发生什么是无关紧要的。
- 需要修改使用消息,因为解析器不知道完整的结构
--lport
并且--rport
不会出现在帮助信息中