在多个自定义模块支持的多个脚本中使用 python 的 argparse

2024-04-21

我正在构建一组用于管理我们的基础设施的脚本和模块。为了让事情井井有条,我想整合尽可能多的努力,并尽量减少新脚本的样板代码。

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

一个示例结构是让脚本和库组织如下:

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

在这种情况下script1只能利用logger and lib1, while script2会利用logger and lib2。在这两种情况下,我希望记录器接受“-v”和“-d”,而script1也可以接受额外的参数和lib2其他参数。我知道这可能会导致冲突,并将手动管理。

script1

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

script2

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

logger

#!/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 设置。如何在库文件和脚本之间完成此操作?


最简单的方法是在每个模块中都有一个接受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...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多个自定义模块支持的多个脚本中使用 python 的 argparse 的相关文章

  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • 在 Pandas 中按日期获取有效合约

    我在检测 pandas DataFrame 中的活动合约方面遇到了一些困难 假设每一行都是一个协商 对于每一行 我有两列 initial date 和 end date 我想知道的是按日期划分的活跃合约数量 到目前为止我做了一个非常低效的方
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • 更改 pandas 中多个日期时间列的时区信息

    有没有一种简单的方法可以将数据帧中的所有时间戳列转换为本地 任何时区 不是逐列进行吗 您可以有选择地将转换应用于所有日期时间列 首先 选择它们select dtypes https pandas pydata org pandas docs
  • Python:计算数据帧列中所有行中特定字符的实例数

    我有一个包含列 toaddress ccaddress body 的数据框 df 我想迭代数据帧的索引 以获取 toaddress 和 ccaddress 字段中电子邮件地址的最小 最大和平均数量 这是通过计算这两列中每个字段中的 和 的实
  • 为什么我用 beautifulSoup 刮的时候有桌子,但没有 pandas

    尝试抓取条目页面转换为制表符分隔格式 主要拉出序列和 UniProt 登录号 当我跑步时 url www signalpeptide de index php sess m listspdb bacteria s details id 10
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr
  • select() 可以在 Windows 下使用 Python 中的文件吗?

    我正在尝试在 Windows 下运行以下 python 服务器 An echo server that uses select to handle multiple clients at a time Entering any line o
  • Pandas Dataframe:将包含列表的行扩展到多行,并为所有列提供所需的索引

    我在 pandas 数据框中有时间序列数据 索引为测量开始时的时间 列中包含以固定采样率记录的值列表 连续索引 列表中元素数量的差异 这是它的样子 Time A B Z 0 1 2 3 4 1 2 3 4 2 5 6 7 8 5 6 7 8
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t

随机推荐

  • 如何让 Celery 工作人员返回任务结果

    我有一个调用任务的烧瓶应用程序 该任务从数据库中提取数据 绘制折线图并返回在 html 页面上呈现的 html 内容 如果没有 Celery Flask 应用程序可以正常工作并在客户端呈现折线图 但现在我想委托 celery 通过以下方式运
  • CDN 不工作时如何加载本地文件

    我正在使用一些 CDN js 和 css 文件 我在Google上搜索了如果CDN不工作如何加载本地数据 我发现一个很好的链接是这样写的
  • 仅加载 html5 视频/音频的元数据

    首先 我想问这个问题 如果没有任何其他视频内容 我无法加载元数据 preload metadata 不管用 我在 Win Chrome 上测试 不知道它在 Safari FF IE Opera 上如何工作 因此我无法快速加载六个或更多视频剪
  • 事件处理程序返回未定义?

    假设我将 jQuery 单击事件的事件处理程序附加到我的对象的函数之一 但为什么它在我的属性上返回未定义 var buttonView label underscore onClick function alert clicked this
  • 将 SharePoint 用户写入 SharePoint 列表中的用户字段的正确方法

    我正在将用户写入 SharePoint 列表 我读到 SharePoint 用户字段内部有一个类似这样的字符串 userId userLoginName 在写入用户字段时 我尝试以相同的方式进行格式化 例如 当我写入此字符串时 它会起作用
  • 将多个 Word 文档合并为一个 Open Xml

    我有大约 10 个 word 文档 它们是使用 open xml 和其他东西生成的 现在我想创建另一个word文档 我想将它们逐一加入到这个新创建的文档中 我希望使用 open xml 任何提示都会很有意义 下面是我的代码 private
  • npm start 如何在端口 8000 上运行服务器

    我最近使用 github 上的 Angular Seed 文件夹进行 Angular 应用程序开发 在之前的一些 AngularJS 教程中 Angular Seed 文件夹中有一个脚本文件夹和一个 server js 文件 其中包含运行节
  • 是否可以将 UIView 的顶部固定到导航栏的底部?

    我试图将 UIView 定位在导航栏下方 20pt 但是当我相对于视图控制器上的视图设置它时 它仍然位于导航栏下方 20pt 并且我不想对其进行硬编码 是否可以将其放置在远离导航栏的位置 要以编程方式执行此操作 请使用topLayoutGu
  • Powershell 以块的形式读取文件

    我有一个用 Powershell 编写的脚本 它通过 FTP 传输文件 使用以下命令可以正常工作 content System IO File ReadAllBytes backup app data 但是 一旦文件大小达到 2Gb 此方法
  • 标题正确,但 Chrome 显示“资源解释为文档”

    我读了很多这样的问题 但我真的无法弄清楚 我用archiver https www npmjs com package archiver and express https www npmjs com package expressNode
  • 如果电子邮件/密码输入错误,无法显示错误消息

    如果电子邮件 密码输入错误 我希望出现一个消息框 我正在使用 else 语句 但如果登录不正确 它不会显示消息 MyConn New OleDbConnection MyConn ConnectionString connString My
  • 删除 ThreadPoolExecutor 的所有排队任务

    我有一个相当简单的问题线程池执行器 http java sun com javase 6 docs api java util concurrent ThreadPoolExecutor html 我遇到以下情况 我必须使用队列中的对象 为
  • DynamoDB:键及其含义

    我对如何使用 DynamoDB 表键感到困惑 该文档提到了 HASH 似乎也称为分区 键和 RANGE 或排序 键 我试图将这些与我之前对数据库索引理论的理解大致保持一致 我目前主要基于猜测的理解是 HASH 键本质上是主键 它必须是唯一的
  • Spring 部分更新对象数据绑定

    我们正在尝试在 Spring 3 2 中实现一个特殊的部分更新功能 我们使用 Spring 作为后端 并有一个简单的 Javascript 前端 我无法找到满足我们要求的直接解决方案 即update 函数应该接受任意数量的 field va
  • 我可以在乳胶文档的标题中使用 knitr 内联表达式吗?

    我想使用 Knit Sweave 内联调用 Sexpr 在 LaTeX 文档的标题中 在 begin document 命令之后但在 maketitle 命令之前 内联 R 代码将从我嵌入 LaTeX 的 R 脚本早期创建的 R 数据帧中提
  • sqlite只支持1笔交易?

    在使用 ADO NET 时 也许我错了 我不知道它叫什么 我注意到我只能通过连接开始事务 并且命令似乎有 command Transaction 获取事务数据但不启动事务本身 实际上 在查看时我在 System Data SQLite 中看
  • typeid 运算符的奇怪行为?

    使用 XCode 3 2 3 64 位 我得到以下奇怪的输出 我究竟做错了什么 include
  • Willpopscope 无法在 Web 上拦截浏览器后退按钮

    我尝试过拦截网络上的后退按钮 但它不会被触发 我怎样才能让它发挥作用 WillPopScope onWillPop print will pop on web Get offNamed orders return new Future gt
  • grunt-wiredep 对具有不同依赖关系的多个文件

    目前的项目结构有点像这样 index html bower json bower components 建议的项目结构将在项目根目录中添加更多静态 html 文件 到目前为止 我一直在管理 Bower json 中的所有前端依赖项 并使用
  • 在多个自定义模块支持的多个脚本中使用 python 的 argparse

    我正在构建一组用于管理我们的基础设施的脚本和模块 为了让事情井井有条 我想整合尽可能多的努力 并尽量减少新脚本的样板代码 特别是这里的问题是整合 ArgumentParser 模块 一个示例结构是让脚本和库组织如下 bin script1