Python argparse 条件要求

2024-02-12

如何设置 argparse 如下:

if -2 is on the command line, no other arguments are required
if -2 is not on the command line, -3 and -4 arguments are required

例如,

-2 [good]
-3 a -4 b [good]
-3 a [not good, -4 required]
-2 -5 c [good]
-2 -3 a [good]

这里有很多类似的问题,但要么它们没有解决这种情况,要么我不明白。

Python 2.7(如果有的话)。


子解析器(如评论中建议的)可能会起作用。

另一种选择(因为mutually_exclusive_group不能完全做到这一点)只是手动编码,如下所示:

import argparse

def main():
    parser = argparse.ArgumentParser()

    parser.add_argument('-2', dest='two', action='store_true')
    parser.add_argument('-3', dest='three')
    parser.add_argument('-4', dest='four')
    parser.add_argument('-5', dest='five')

    args = parser.parse_args()

    if not args.two:
        if args.three is None or args.four is None:
            parser.error('without -2, *both* -3 <a> *and* -4 <b> are required')

    print args
    return 0

添加一个小驱动程序:

import sys
sys.exit(main())

并用你的例子来运行,它似乎做了正确的事情;这是两次运行:

$ python mxgroup.py -2; echo $?
Namespace(five=None, four=None, three=None, two=True)
0
$ python mxgroup.py -3 a; echo $?
usage: mxgroup.py [-h] [-2] [-3 THREE] [-4 FOUR] [-5 FIVE]
mxgroup.py: error: without -2, *both* -3 <a> *and* -4 <b> are required
2
$ 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python argparse 条件要求 的相关文章

随机推荐

  • 如何为 rsync SSH 命令自动传递密码?

    我需要去做rsync by ssh并希望自动执行此操作 而无需传递密码ssh手动 使用 sshpass 非交互式 ssh 密码提供程序实用程序 在Ubuntu上 sudo apt get install sshpass rsync 命令 u
  • 开始使用 RxJava 和 sqlite

    我正在学习 RxJava 并且已经阅读了几篇文章和视频 我对 RxJava 所提供的功能感到非常敬畏 所以我认为目前已经了解了响应式编程的全部内容 Dan Lew 的本教程 http blog danlew net 2014 09 15 g
  • mysqldump - 将多个数据库从单独的 mysql 帐户转储到一个文件

    我使用的标准 mysqldump 命令是 mysqldump opt databases dbname host dbhost user dbuser password dbpass gzip gt filename 转储多个数据库 mys
  • 通过performSelectorOnMainThread调用方法与普通方法调用

    谁能告诉我当我使用调用方法时有什么不同performSelectorOnMainThread并在没有执行选择器的情况下调用相同的方法 For Exa void sampleCALL 现在使用这两个场景调用此方法 self performSe
  • 动画播放与否取决于链接动画的animationRepeatCount

    我对 iOS 完全陌生 我正在开发一个具有许多帧动画的应用程序 一切都很顺利 直到我尝试用下面发布的方法制作最终动画 该方法是分配给内置文本到语音合成器的委托 func speechSynthesizer synthesizer AVSpe
  • 与 std::minmax_element 一起使用的步长/步长迭代器

    我有一个一维浮点数组 它表示 m n 行和列 浮点值表 我的要求是为每行和每列找到一个最小 最大元素 对于行 我可以通过使用 std minmax element 指定 n 个元素的范围来轻松完成此操作 但对于列 我需要使用步幅迭代器 因为
  • 共享内存——需要同步

    我见过一个项目 其中进程之间的通信是使用共享内存进行的 例如使用 CreateFileMapping在 Windows 下 并且每当其中一个进程想要通知共享内存中某些数据可用时 一种使用命名事件的同步机制会通知感兴趣的一方共享内存的内容发生
  • 在 csv 导入 pandas 期间跳过行

    我正在尝试使用导入 csv 文件pandas read csv 但是 我不想导入数据文件的第二行 0 索引的索引 1 的行 我不知道如何不导入它 因为该命令使用的参数似乎不明确 来自熊猫网站 skiprows 类似列表或整数 要跳过的行号
  • 具有lookbehind的正则表达式无法使用re.match工作

    以下是Python代码 import re line http google com procLine re match r lt http line if procLine group print line did not match r
  • R中的光栅层

    我有一个包含多个 adf 文件的 GIS 项目 由于我是 ArcMap 的新手 我不知道如何使用它们 我设法使用光栅库将它们读入 r r lt raster w001001 adf 当查看 sum r 时 我得到 sum r class R
  • 加载前如何与页面交互?

    我在 python 中使用 selenium 时遇到了问题 我正在尝试与这样的页面进行交互 driver window manager get url iframe driver window manager find elements b
  • Squid:转发到另一个代理(带有父代理的身份验证详细信息)

    简而言之 我正在寻找一种简单的方法来执行以下操作 如果可能 请提供代码示例 在我的计算机上设置并启动代理服务器 假设地址为 10 10 200 200 6767 该服务器可以捕获来自我手机的所有 Web 请求 一旦来自手机的请求到达此代理
  • IOS 是否以任何方式支持 Active Directory?

    我知道这是一个非常普遍的问题 我不是在寻找代码或任何东西 即使是一个链接或简短的解释也会很好 特别是寻找一种从内部 IOS 应用程序浏览基于网络的活动目录的方法 使用云或电子邮件不是一个选择 可能吗 有一个IBMdeveloperWorks
  • 运行 Angular 编译器-cli (ngc);找不到模块“@angular/core”

    我尝试使用以下命令安装 Angular 编译器 cli ngc npm install angular compiler cli typescript angular platform server angular compiler 安装似
  • 如何使用 Firebase Auth 创建应用程序集成测试?

    我创建了一个 Flutter 应用程序 我的应用程序使用 Firebase Auth 我需要为我的应用程序创建集成测试 但如果需要输入登录名和密码 我不知道如何执行此操作 我是颤振新手 这对我来说是一个问题 我将不胜感激任何帮助 对于集成测
  • 是否可以传递立即调用的函数表达式的执行上下文

    考虑以下代码 function var a 5 var someFunc function function anotherFunc window myGlobalObj init function and somehow here I w
  • 无法在 gradle 文件中应用“android-reporting”

    当我把apply plugin android reporting 按照建议在我的项目级别 build gradle 文件中here https developer android com studio test command line
  • Notepad++ 在左侧显示打开的文件

    在 Notepad 中 有没有办法在左侧列表中显示当前打开的文件列表 而不是使用默认的选项卡视图 我希望它类似于 TextPad 显示当前打开的文件的方式 我指的不是允许我打开新文件的资源管理器 我只是不喜欢打开许多文件时顶部的选项卡 设置
  • 带有错误句柄的自定义验证 Ninja 表单

    我在 WordPress 安装中使用 Ninja Form 插件 我的表单有 3 个输入文本字段 在按下提交按钮后 我需要通过检查输入的值是否存在于我的数据库中的自定义表中来验证此输入之一 如果该值尚不存在 则不会发生任何情况 Ninja
  • Python argparse 条件要求

    如何设置 argparse 如下 if 2 is on the command line no other arguments are required if 2 is not on the command line 3 and 4 arg