如何为 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 中的现有参数添加位置选项 的相关文章

随机推荐

  • 如何使用 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