【问题标题】:Using python's argparse in multiple scripts backed by multiple custom modules在由多个自定义模块支持的多个脚本中使用 python 的 argparse
【发布时间】:2013-03-07 20:05:35
【问题描述】:

我正在构建一组脚本和模块来管理我们的基础架构。为了使事情井井有条,我想尽可能多地整合工作,并尽量减少新脚本的样板。

特别是这里的问题是整合 ArgumentParser 模块。

一个示例结构是将脚本和库组织成这样:

|-- bin
    |-- script1
    |-- script2
|-- lib
    |-- logger
    |-- lib1
    |-- lib2

在这种情况下script1 可能只使用loggerlib1,而script2 将使用loggerlib2。在这两种情况下,我都希望记录器接受“-v”和“-d”,而script1 也可以接受其他参数和lib2 其他参数。我知道这可能会导致冲突,并将手动进行管理。

脚本1

#!/usr/bin/env python
import logger
import lib1
argp = argparse.ArgumentParser("logger", parent=[logger.argp])

脚本2

#!/usr/bin/env python
import logger
import lib2

记录器

#!/usr/bin/env python
import argparse
argp = argparse.ArgumentParser("logger")
argp.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
argp.add_argument('-d', '--debug', action="store_true", help="Debug output. Assumes verbose output.")

每个脚本和库都可能有自己的参数,但是这些都必须合并到一个最终的 arg_parse()

到目前为止,我的尝试导致无法继承/扩展 argp 设置。这如何在库文件和脚本之间完成?

【问题讨论】:

  • 您说 argparse parents=[parser1, parser2] 功能对您不起作用 - 它是如何中断的?

标签: python inheritance command-line-arguments argparse


【解决方案1】:

最简单的方法是在每个模块中设置一个接受ArgumentParser 实例并向其添加自己的参数的方法。

# logger.py
def add_arguments(parser):
    parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
    # ...

# lib1.py
def add_arguments(parser):
    parser.add_argument('-x', '--xtreme', action="store_true", help="Extremify")
    # ...

每个脚本都会创建自己的ArgumentParser,将其传递给每个提供参数的模块,然后添加自己的特定参数。

# script1.py
import argparse, logger, lib1
parser = argparse.ArgumentParser("script1")
logger.add_arguments(parser)
lib1.add_arguments(parser)
# add own args...

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2017-11-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2020-06-07
    • 2016-12-24
    • 2016-07-29
    • 1970-01-01
    相关资源
    最近更新 更多