如何为 argparse 中的现有参数添加位置选项

2024-01-17

我正在处理一个(Python 3.x)脚本(由其他人编写),其中输入和输出当前使用标记的可选参数指定,如下所示:

parser.add_argument('-i', '--input', nargs='?', type = argparse.FileType('r'),
                    default=sys.stdin, dest='inputfile')
parser.add_argument('-o', '--output-file', nargs='?', type=argparse.FileType('w'),
                    default=sys.stdout, dest='outputfile')

我想升级此脚本,以便可以将输入和输出文件指定为位置参数,同时保留现有的标志参数以实现向后兼容性。我还想智能地处理可能因将标记的参数与位置参数混合而产生的潜在冲突(即,如果只有其中之一)-i or -o给出后,单个位置参数会自动传递给另一个位置参数,并且两个位置参数会引发冗余错误,而如果两者都-i and -o给定,那么任何位置参数都会引发冗余错误)。

注意:当前编写的脚本不接受任何位置参数,尽管它接受其他标志,除了与输入和输出文件相关的参数之外,有些带有参数,有些不带参数。

这可以用 argparse 实现吗(如果可以的话,如何实现)还是我必须使用其他东西重写参数解析(如果可以的话,你有什么建议)?


坚持FileType会很尴尬。那type打开或创建文件。因此,当您只需要 2 个文件时,您可能会打开 4 个文件。但是,如果其中一个文件是stdin or out你不想关闭它。你无法处理positional可以读取或写入,具体取决于给出的其他参数。

您可以尝试定义 4 个默认字符串参数、2 个标记参数和 2 个nargs='?'位置性的。给他们不一样的dest。然后你可以将你的智慧应用到 4 个可能的值上。默认默认None应该足够清楚地表明未提供值。一旦决定了这两个文件名,就可以打开并使用它们。较新的 Python 建议使用with上下文,尽管当文件已经打开时这可能会很尴尬(例如sys.stdin).

我认为你不应该尝试在内部实现该逻辑argparse。解析完之后再做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 argparse 中的现有参数添加位置选项 的相关文章

  • 在 matplotlib 中使用轴绘制带有子点的图形时出现错误

    我尝试使用下面的代码绘制子图 但是我得到了 AttributeError numpy ndarray object has no attribute boxplot 但改变plt subplots 1 2 它正在用indexerror绘制箱
  • 使用 NumPy 函数计算 Pandas 的加权平均值

    假设我们有一个像这样的 pandas 数据框 a b id 36 25 2 40 25 3 46 23 2 40 22 5 42 20 5 56 39 3 我想执行一个操作 a div b 然后按 id 分组 最后使用 a 作为权重计算加权
  • GCP - 获取有关存储桶的完整信息

    我需要获取存储在Google Bucket中的文件信息 信息如文件大小 存储类别 上次修改时间 类型 我搜索了谷歌文档 但它可以通过curl或控制台方法来完成 我需要从 Python API 获取该信息 例如下载 blob 将 blob 上
  • 没有名为 pandas_datareader 的模块

    我刚刚安装了pandas datareader using pip install pandas datareader运行成功 现在我尝试将它用于教程 当我尝试导入时出现此错误 import pandas datareader as pdr
  • Discord-py Rewrite - Cog 中的基本 aiohttp Web 服务器

    我正在尝试将基本的 aiohttp 网络服务器集成到 Cog 中 使用 discord py 重写 我对齿轮使用以下代码 from aiohttp import web import discord from discord ext imp
  • 列表子类的 Python 类型

    我希望能够定义列表子类的内容必须是什么 该类如下所示 class A list def init self list init self 我想包括打字 这样就会发生以下情况 import typing class A list typing
  • Pygame 中可以改变精灵颜色吗?

    我正在使用 Pygame 在 Python 中制作一个游戏 其中在游戏开始前包括一个小型头像制作器 但不是创建一个包含 88 种不同发型和颜色组合的大精灵表 有没有一种方法可以让我只使用通用的 每个发型的 png 图像并在游戏中为其应用颜色
  • 无法在 VS Code 中导入

    我是 python 新手 一直在使用 VS code 现在我正在研究汤普森采样问题 需要 numpy 和 matplotlib 我已经导入了这两个库 但 VS code 给出了无法导入的错误 我知道我必须使用 PIP 进行安装 并且我已经看
  • Cron 不会导入 pandas 模块来执行 python 脚本。 ```导入错误:没有名为 pandas 的模块```

    我使用的是xubuntu 18 01 我有一个 python 程序 可以抓取天气数据并将文件保存为 csv 运行命令完美运行weatherdata在我授予它许可后 在终端中使用chmod x weatherdata 我希望使用 cron 每
  • Python3.5 BeautifulSoup4从div中的'p'获取文本

    我试图从 div 类 caselawcontent searchable content 中提取所有文本 此代码仅打印 HTML 不打印网页中的文本 我缺少什么来获取文本 以下链接位于 finteredcasesdoc text 文件中 h
  • python sqlite3从excel创建数据库

    我正在尝试从 Excel 电子表格创建数据库 我有下面的代码 问题是当我运行代码时 我的数据库为每列创建一个表 我想为工作簿中列出的每个电子表格创建一个表格 工作表名称为工作表 1 和工作表 2 import sqlite3 import
  • 导入错误 - 发生了什么?

    Python 导入 再次 我有这个文件结构 test start py from scripts import main scripts init py empty main py from import install install p
  • 列表值意外变化[重复]

    这个问题在这里已经有答案了 为什么是这个列表r即使我只是想更改列表 也会被更改v 即使它们不指向相同的内存位置 r v list r 2 2 1 2 8 3 10 2 1 8 4 2 4 6 4 for c a in enumerate r
  • 为什么 enumerate、zip、range 类型不属于 types.GeneratorType?

    Python 3 引入了类似生成器的对象 在调用时返回range and zip 返回的对象就像一个生成器 可以迭代一次 但不能很好地 打印 就像enumerate 返回参数 然而 我很困惑地发现它们是不同的对象类型并且不属于types G
  • 如何使用 win32com.client api 访问 MS Word 的脚注

    我正在尝试使用 win32com client api 访问 MS Word 文件的脚注 我已经用谷歌搜索过 但没能找到合适的方法 我使用 python docx 来实现上述目的 但我发现当前版本的 python docx 无法访问 MS
  • 循环列表的值[重复]

    这个问题在这里已经有答案了 我是编码新手 正在尝试编写一个简单的代码 该代码将采用一个列表 例如 1 2 3 并循环元素 n 次 所以如果n 1 我应该得到A 3 1 2 如果n 2 我应该得到A 2 3 1 我写的代码是 n 1 j 0
  • 如何在离线绘图中绘制垂直线?

    如何使用 python 以离线方式绘制一条垂直线 我想在 x 20 x 40 和 x 60 处添加线条 所有线条都在同一个图中 def graph contracts self trace1 go Scatter x np array ra
  • pandas 在单元格中缩写字典

    我有一个相当复杂的嵌套字典 它使用 pandas 很好地打印为 html 但是 有一个字典作为打印在单元格中的值之一 如下所示 pd set option display max colwidth 1 已设置 所以这不应该是问题 这是产生问
  • 初始化 dask 分布式工作线程的状态

    我正在尝试做类似的事情 resource MyResource def fn x something dosemthing x resource return something client Client results client m
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看

随机推荐

  • 如何使用 Moq.Dapper 模拟 QueryMultiple

    我正在编写单元测试用例 并且我成功地编写了单元测试用例Query 但我无法编写单元测试用例QueryMultiple 对于查询我是这样写的 IEnumerable
  • 设置视图中的所有变量

    问题 如何轻松更改 ForEach 语句内单独视图中的所有变量 查看代码中的注释 ContentView State var isShowing false var body some View Toggle IsShowing isOn
  • 如何在 MongoDB 中创建“触发器”

    我想创建一个触发器 其中插入的每个子文档都会在其他集合中增加一个字段 用于生成该集合的子文档计数 我尝试使用 MapReduce 创建搜索 但对于数百万个注册表来说速度非常慢 注意 我使用 C 但如果您喜欢展示如何在 Bson 中执行操作
  • 在 iPhone 上播放背景音频

    如何在应用程序运行时播放背景音频 Thanks 好的 这是 iOS4 和 iOS5 上背景声音的解决方案 绝对适用于 iOS 5 0 1 我仅使用 AVPlayer 对其进行了测试 它可能也适用于 MPMusicPlayerControll
  • 无法在 JavaScript 中创建多个 if 条件?

    我完全不知道为什么这不起作用 对我来说毫无意义 这将返回 语法错误 解析错误 if this attr id search opening true return false 为了更好地衡量 我还尝试了以下方法 得到了相同的结果 if 1
  • 使用 OpenCV 进行图像 alpha 合成

    我想实施这些步骤 这是我的代码 import cv2 from skimage io import import numpy as np imA cv2 imread C jpg kernel np ones 3 3 np uint8 im
  • 如何为 Spring Boot 应用程序配置端口

    如何配置 Spring Boot 应用程序侦听的 TCP IP 端口 使其不使用默认端口 8080 As 文档中说 http docs spring io spring boot docs current reference htmlsin
  • 从邻接矩阵绘制图

    我正在 MATLAB 中寻找一个命令 它可以帮助我在给定邻接矩阵的情况下绘制图形 谁能帮我 此外 我需要一些图形工具来计算图形上点之间的最短距离 集合的直径 集合之间的距离等 谢谢 检查这个Matlab函数松下春菜 http nlab ee
  • 对 Laravel 中的可选字段应用“存在”验证

    我正在 Laravel 5 4 中的一个项目上工作 我想对两个可选字段执行 存在 验证规则 仅当提供值时 我已经尝试过以下方法 Define validation rules validator Validator make request
  • 使用默认 kms 密钥进行 s3 跨帐户访问

    我的账户中有一个 s3 存储桶 默认启用了 SSEaws kms钥匙 我希望向我的存储桶提供另一个帐户的读取权限 我已点击以下链接来提供访问权限 https aws amazon com premiumsupport knowledge c
  • 缺少 [mx.rpc]::IResponder

    我正在尝试在 Flash 应用程序中使用 Flex 4 SDK 的 mx rpc 包 我将 Flex 的 rpc swc Adobe Adobe Flash Builder 4 sdks 4 0 0 frameworks libs rpc
  • 使用源链接的最佳实践

    我正在尝试在 NuGet 包中实现 Source Link 我已成功实施 GitHub README 中的说明 https github com dotnet sourcelink https github com dotnet sourc
  • 我想在脚本应用程序中运行一个函数,该函数会自动在列中查找单词并自动将该行存档到另一个选项卡

    如果 D 列包含 已取消配置 一词 我希望自动将行归档到另一个选项卡 我不是手动编辑单元格 而是从 CSV 导出中复制并粘贴 以便各列预先填充信息 我尝试了下面的脚本 但收到一条错误消息 提示未定义 我不确定这是否与我没有手动编辑工作表上的
  • C++:具有多态性的多重继承

    提前原谅菜鸟问题 我有4节课 class Person class Student public Person class Employee public Person class StudentEmployee public Studen
  • Rails 使模型的片段缓存过期

    我正在 Rails 项目中使用缓存 并且希望使特定 url 的缓存过期 我收到以下命令来使与传递的 URL 相对应的片段过期 ActionController Base new expire fragment localhost 3000
  • 如何在 python 3.6 中导入我自己的模块?

    假设我有一个如下文件 项目0 pizza py 项目0 make pizza py 和披萨 def make pizza size toppings print nMaking a str size inch pizza with the
  • 使用 Javascript 检测 html 页面中的所有图像

    我正在编写一个 Chrome 扩展程序 并试图检测网页中的所有图像 我正在尝试在我的 JS 代码中检测all网页上的图像 我的意思是 网页加载后加载的图像 用作背景的图像 在 CSS 或内联 html 中 网页加载完成后可以加载的图像 例如
  • JetBrains 的 @Contract 注释

    如何org jetbrains annotations Contract注释工作 IntelliJ IDEA 如何支持它 首先 我应该说这个注释仅供IDEA用来检查可能的错误 Java 编译器几乎会完全忽略它 它将出现在已编译的工件中 但没
  • 如何为 tf-idf 矢量器创建 scikit 管道?

    我正在经历这个官方sklearntutorial https scikit learn org stable auto examples model selection grid search text feature extraction
  • 如何为 argparse 中的现有参数添加位置选项

    我正在处理一个 Python 3 x 脚本 由其他人编写 其中输入和输出当前使用标记的可选参数指定 如下所示 parser add argument i input nargs type argparse FileType r defaul