Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对自定义模块和行参数使用python argparse_Python_Module_Argparse - Fatal编程技术网

对自定义模块和行参数使用python 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

我正在为某个项目构建一组脚本和模块。根据请求,有一些必需的命令行参数。另外,一些模块可以使用一些自定义参数(如数字公差或参数)。所有脚本和模块都可以使用另一组公共参数(例如详细级别)

我正在尝试使用python3 argparse来实现这一点

|- 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
问题。