我正在尝试编写一个可以由第三方扩展的Python程序。无论提供什么参数,程序都将从命令行运行。在
为了允许第三方创建自己的模块,我创建了以下(简化)基类:
class MyBaseClass(object):
def __init__(self):
self.description = ''
self.command = ''
def get_args(self):
# code that I can't figure out to specify argparse arguments here
# args = []
# arg.append(.....)
return args
它们通过get_args()提供的任何参数都将添加到该特定模块的子Parser中。我希望他们能够指定任何类型的参数。在
我不确定声明并从子类模块中获取参数到主程序的最佳方法。我成功地找到了MyBaseClass的所有子类,并遍历它们来创建子Parser,但是我找不到一个干净的方法将各个参数添加到子Parser中。在
以下是主程序的当前代码:
^{pr2}$如何最好地通过get_args()或类似方法指定外部模块中的参数,然后将它们添加到子parser?我的一次失败的尝试如下所示,但没有成功,因为它尝试传递每个可能的选项来add\u argument(),不管它是否有值:
subparser_dict[module.__name__].add_argument(arg['long-arg'],
action=arg['action'],
nargs=arg['nargs'],
const=arg['const'],
default=arg['default'],
type=arg['type'],
choices=arg['choices'],
required=arg['required'],
help=arg['help'],
metavar=arg['metavar'],
dest=arg['dest'],
)
在不完全理解模块结构的情况下,我认为您希望能够将
add_argument
调用的参数作为可以导入的对象提供。在例如,可以提供位置参数列表和关键字参数字典:
生产
^{pr2}$在
argparse.py
中,add_argument
方法(属于ArgumentParser
的一个超类)具有这个通用签名此方法的代码处理这些参数,将
args
添加到kwargs
,添加默认值,并最终将kwargs
传递给适当的Action
类,返回新操作。(它还向解析器或子parser“注册”操作)。Action子类的__init__
列出了参数及其默认值。在我只需要从您的
get_args
方法返回一个ArgumentParser
实例。然后,您可以创建一个新的ArgumentParser
来使用parents
参数:https://docs.python.org/3/library/argparse.html#parents连接所有其他参数解析器。在相关问题 更多 >
编程相关推荐