详解Python中命令行参数argparse的常用命令

 更新时间:2023年01月29日 14:12:23   作者:啊哈彭  
这篇文章主要为大家详细介绍了Python中命令行参数argparse的一些常用命令,文中的示例代码讲解详细,具有一定的学习价值,需要的可以了解一下

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不支持多个子命令同时使用。

到此这篇关于详解Python中命令行参数argparse的常用命令的文章就介绍到这了,更多相关Python argparse内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python进行图片验证码识别方法步骤

    Python进行图片验证码识别方法步骤

    这篇文章主要给大家介绍了关于Python进行图片验证码识别的相关资料,基于Python和OpenCV的验证码识别系统具有重要的研究意义和实际应用价值,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • tkinter如何实现打开文件对话框并获取文件绝对路径

    tkinter如何实现打开文件对话框并获取文件绝对路径

    这篇文章主要介绍了tkinter实现打开文件对话框并获取文件绝对路径问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 详解Flask前后端分离项目案例

    详解Flask前后端分离项目案例

    这篇文章主要介绍了Flask前后端分离项目案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 基于MTCNN/TensorFlow实现人脸检测

    基于MTCNN/TensorFlow实现人脸检测

    这篇文章主要为大家详细介绍了基于MTCNN/TensorFlow实现人脸检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python opencv minAreaRect 生成最小外接矩形的方法

    python opencv minAreaRect 生成最小外接矩形的方法

    这篇文章主要介绍了python opencv minAreaRect 生成最小外接矩形的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-07-07
  • Python实现自动整理文件的示例代码

    Python实现自动整理文件的示例代码

    在我们日常生活中,文件总是杂乱无章的,这个时候就需要我们整理一下。但是文件太多的话整理起来是非常麻烦的,因此我们今天就来用Python实现文件的自动整理
    2022-08-08
  • Python实现大文件排序的方法

    Python实现大文件排序的方法

    这篇文章主要介绍了Python大文件排序的方法,涉及Python针对文件、缓存及日期等操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 用python爬取中国大学排名网站排名信息

    用python爬取中国大学排名网站排名信息

    大家好,本篇文章主要讲的是用python爬取中国大学排名网站排名信息,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • python分批定量读取文件内容,输出到不同文件中的方法

    python分批定量读取文件内容,输出到不同文件中的方法

    今天小编就为大家分享一篇python分批定量读取文件内容,输出到不同文件中的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Pycharm 设置默认解释器路径和编码格式的操作

    Pycharm 设置默认解释器路径和编码格式的操作

    这篇文章主要介绍了Pycharm 设置默认解释器路径和编码格式的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论