1、参数个数控制

parser.add_argument('-i', '--integers', nargs='?', const=100, type=int, help='input a number')
参数nargs:
nargs='*' 表示参数可设置0个或多个,参数是一个列表
nargs='+' 表示参数可设置1个或多个,参数是一个列表
nargs='?' 表示参数可设置0个或1个

1、参数名后面必须跟值的情况

1)没有配置nargs

2)设置了nargs='+'

2、使用参数但不跟值的条件

使用nargs='?', 且添加const设定一个参数值。

3、使用时不显式掉用参数但给参数赋默认值

添加default属性即可。

例如:

import argparse

parser = argparse.ArgumentParser(description='This is a parse demo')
parser.add_argument('-i', '--integers', nargs='?', const=10, default=100, type=int, help='input a number') args = parser.parse_args()
print(args.integers) # 显式调用
$ python t3.py -i 1
1
# 使用const属性
$ python t3.py -i
10
# 使用参数的默认值
$ python t3.py
100

4、action--命令行参数与动作相关联

action 命名参数指定了这个命令行参数应当如何处理。

  1. store_[true, false]

    不需要跟参数值,用法: parser.add_argument('--foo', action='store_true'), 如果调用--foo则其值为true。
  2. store_const

    如果使用该命令选项则其值为const指定的值,用法:parser.add_argument('--foo', action='store_const', const=42)。
  3. store_append

    append存储一个列表,并将每个参数值附加到列表中。用法:parser.add_argument('--foo', action='append')。

    常用的组合如默认为False,当指定了此命令则属性为True。

    parser.add_argument('--foo', action='store_true', default=False)

2、参数互斥

如果希望两个或多个参数互斥。可以使用argparse.ArgumentParser.add_mutually_exclusive_group() 功能.

1、参数组

了解互斥之前先看下参数组(group),group功能可以把参数分为不同的组,以更加清晰的方式显示参数信息。

import argparse

parser = argparse.ArgumentParser(description='This is a parse demo') 

group1 = parser.add_argument_group('group1', 'group1 description')
group1.add_argument('--foo', help='foo help')
group1.add_argument('--foo2', help='foo1 help')
group2 = parser.add_argument_group('group2', 'group2 description')
group2.add_argument('--bar', help='bar help')
group2.add_argument('--bar2', help='bar2 help') args = parser.parse_args()
print(args) # 测试
$ python t3.py -h
usage: t3.py [-h] [--foo FOO] [--foo2 FOO2] [--bar BAR] [--bar2 BAR2] This is a parse demo optional arguments:
-h, --help show this help message and exit group1:
group1 description --foo FOO foo help
--foo2 FOO2 foo1 help group2:
group2 description --bar BAR bar help
--bar2 BAR2 bar2 help

2、互斥组

创建一个互斥组。 argparse 将会确保互斥组中只有一个参数在命令行中可用。

import argparse

parser = argparse.ArgumentParser(description='This is a parse demo')
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true')
group.add_argument('--bar', action='store_false') args = parser.parse_args()
print(args) # 测试互斥组
$ python t3.py --foo
Namespace(foo=True, bar=True) $ python t3.py --bar
Namespace(foo=False, bar=False) $ python t3.py --foo --bar
usage: t3.py [-h] [--foo | --bar]
t3.py: error: argument --bar: not allowed with argument --foo

3、子命令

在代码功能较多时,使用子命令可以把相关的小功能合并为一类命令,然后用二级参数进一步精细控制。这样能让代码更加模块化,提高可读性同时也便利了使用者调用。例如git的commit就是一个子命令,commit是一个大类命令,而commit本身还有很多二级参数。

import argparse

def add(arguments):
print(f'{arguments.x} + {arguments.y} = {arguments.x + arguments.y}') def sub(arguments):
print(f'{arguments.x} - {arguments.y} = {arguments.x - arguments.y}') # create the top-level parser
parser = argparse.ArgumentParser(description='This is a parse demo')
subparsers = parser.add_subparsers() # create the parser for command 'add'
add_parser = subparsers.add_parser('add', help='calc add')
add_parser.add_argument('-x', type=int, help='x value')
add_parser.add_argument('-y', type=int, help='y value')
add_parser.set_defaults(func=add) # create the parser for command 'sub'
sub_parser = subparsers.add_parser('sub', help='calc sub')
sub_parser.add_argument('-x', type=int, help='x value')
sub_parser.add_argument('-y', type=int, help='y value')
sub_parser.set_defaults(func=sub) args = parser.parse_args()
print(f"print the input: x={args.x}, y={args.y}") args.func(args) # 跳转到对应的函数 # 测试
$ python t2.py add -x 1 -y=2
print the input: x=1, y=2
1 + 2 = 3 $ python t2.py sub -x 1 -y 2
print the input: x=1, y=2
1 - 2 = -1

需要注意的是:parse_args只返回主解析器和子命令对应的子解析器的属性,没有其他子命令的解析器,因此上面例子add和sub不可同时调用。也就是说subparser不支持多个子命令同时使用。

参考文献

argparse — Parser for command-line options, arguments and sub-commands — Python 3.8.14 documentation

python命令行参数argparse常用命令的更多相关文章

  1. linux命令行下svn常用命令

    linux命令行下svn常用命令 1. 将文件checkout到本地目录 1 #path是服务器上的目录 2 svn checkout path 3 4 #示例 5 svn checkout svn: ...

  2. Python命令行解析argparse常用语法使用简介

    查看原文:http://www.sijitao.net/2000.html python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块.argp ...

  3. python 命令行参数——argparse模块的使用

    以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...

  4. DOS命令行操作MySQL常用命令

    平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...

  5. 运行和控制Nginx——命令行参数和信号

    参考资料: Nginx中文文档: http://www.nginx.cn/nginxchscommandline Nginx的启动.停止.平滑重启.信号控制和平滑升级:http://zachary-g ...

  6. go语言之行--文件操作、命令行参数、序列化与反序列化详解

    一.简介 文件操作对于我们来说也是非常常用的,在python中使用open函数来对文件进行操作,而在go语言中我们使用os.File对文件进行操作. 二.终端读写 操作终端句柄常量 os.Stdin: ...

  7. winrar.exe 命令行参数

    ========= 下面是 我写大论文时候的实例(批量压缩.备份文件)================== * 一共三个文件:(1) MyCopy.bat :   (2) UnCopy.txt :   ...

  8. VS2013 带命令行参数的调试问题 解决方案

    int main(int argc,char* argv[]) argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数 比如:  ...

  9. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  10. 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

随机推荐

  1. Golang 加密方法

    如果想直接使用我下列的库 可以直接go get 我的github go get -u github.com/hybpjx/InverseAlgorithm md5 加密--不可逆 MD5信息摘要算法是 ...

  2. python模拟登录获取网站cookie

    因工作的需要需要使用某第三方网站页面的功能,但其网站未提供API,只有登录用户可使用该功能. 之前试过php使用snoopy获取set-cookie内容项进行手动拼装cookie,使用一段时间后发现网 ...

  3. Huawei OJ 题解 - 31. 整数拆分 - Go 参考解答

    ## 简介- 详情:http://oj.rnd.huawei.com/problems/31/details- 难度:简单## 思路TODO## 用例TODO## 解答```gopackage mai ...

  4. 列表、集合、元组、字典、range

    #列表y = [1,2,3]# 追加y.append(4)print(y)#删除del y[3]print(y)#查询存放个数print(len(y))#查询位置内容print(y[0]) #正序pr ...

  5. JDK动态代理深入剖析

    1 基于接口的代理模式 什么是代理? 简单来说,代理是指一个对象代替另一个对象去做某些事情. 例如,对于每个程序员来说,他都有编程的能力: interface Programmable { void ...

  6. Vue 路由跳转显示空白页面的问题

    在写一个登录界面跳转到首页时,路由如下 export default new VueRouter({ routes: [ { path: "/", name: "Logi ...

  7. 本地JS文件批量压缩

    最近在维护一个小后台项目,有段JS需要压缩上传到CDN存储服务器.由于之前压缩的JS文件都比较少,都是手动压缩的.这次需要压缩的文件比较多,所以用了批量压缩.特此记录一下,方便大家和自己以后再用到的时 ...

  8. SQL语句查询关键字前期数据准备

    前期数据准备 create table emp( id int primary key auto_increment, name varchar(20) not null, gender enum(' ...

  9. ArcGISServer 10.4 虚拟机 安装 新建站点失败 Failed to configure the server machine ''. Server machine '' is not a local

    在通过 VMware  创建的虚拟机上(win7 64位)安装ArcServer 10.4,新建站点时出现下面的错误. Failed to configure the server machine ' ...

  10. 【SQL基础】【关键字大写】条件查询:比较、不等于、IN、为空、BETWEEN

    〇.概述 1.内容介绍 条件查询:比较.不等于.IN.为空.BETWEEN 2.建表语句 drop table if exists user_profile; CREATE TABLE `user_p ...