对自定义模块和行参数使用python argparse
我正在为某个项目构建一组脚本和模块。根据请求,有一些必需的命令行参数。另外,一些模块可以使用一些自定义参数(如数字公差或参数)。所有脚本和模块都可以使用另一组公共参数(例如详细级别) 我正在尝试使用python3 argparse来实现这一点对自定义模块和行参数使用python argparse,python,module,argparse,Python,Module,Argparse,我正在为某个项目构建一组脚本和模块。根据请求,有一些必需的命令行参数。另外,一些模块可以使用一些自定义参数(如数字公差或参数)。所有脚本和模块都可以使用另一组公共参数(例如详细级别) 我正在尝试使用python3 argparse来实现这一点 |- bin | +- scriptN.py |- lib | +- requested_args.py | +- common_args.py | +- dataset.py | +- modelN.py 我尝试使用嵌套的父argp
|- bin
| +- scriptN.py
|- lib
| +- requested_args.py
| +- common_args.py
| +- dataset.py
| +- modelN.py
我尝试使用嵌套的父argparser,如下所示:
在scriptN.py中:
parser = argparser.ArgumentParser(parents=[requested_args.parser,
commont_args.parser,
dataset.parser,
modelN.parser]
对于modelN
文件:
parser = argparser.ArgumentParser(add_help=False,
parents=[requested_args.parser,
commont_args.parser]
因此,request_args
和common_args
解析器被“包含”了两次,导致相同的选项已经被定义
我需要在scriptN.py
中公开导入模块的所有选项,每个模块都可以访问自己的arg和两个公共模块。为简单起见,每个模块/脚本都有一个“args
”对象
我尝试使用本文中描述的方法,但我不知道如何在模块中公开模块arg。如何加入所有argparse,并维护每个模块和所有模块中可用的所有parsedArgument
感谢家长机制只是将参数(
操作
对象)引用从家长复制到孩子。它实际上并不运行父解析器conflict\u handler='resolve'
是处理重复动作定义的另一种方法,但它并不健壮。您可能需要自定义此处理程序
,或者在父类
机制上编写自己的变体。添加参数
创建一个argparse.Action
子类对象,并将对它的引用存储在多个位置,包括解析器动作
列表。但是看看parser.\u add\u container\u actions
,看看实际操作是如何从一个解析器复制到另一个解析器的。这不是小事。@hpaulj:对于冲突问题,我还可以删除dataset
和modelN
文件中的所有parent
。只保留scriptN
。我真的想让解析后的参数在模块内可用。如果没有必需的参数,并且使用parse\u known\u args
可以同时使用多个解析器,每个解析器只处理它知道的参数。另一种方法是使用一个主解析器,并让它将其args
变量传递给子模块。这是一个模块间变量问题,而不是argparse
问题。