python程序运行添加命令行参数argparse模块具体用法详解

 更新时间:2024年01月06日 10:38:43   作者:Elaine猿  
这篇文章主要给大家介绍了关于python程序运行添加命令行参数argparse模块具体用法的相关资料,argparse是Python内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,需要的朋友可以参考下

一. argparse介绍

很多时候,我们的程序要带参数来运行不同的功能,需要解析命令行参数。argparse模块能够很好的提供支持。

argparse是 python 自带的命令行参数解析包,用于解析命令行参数的标准模块。可以让人轻松编写用户友好的命令行接口,还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

二. 使用步骤及参数介绍

argparse模块的使用可以简化成下面四个步骤:

1)import argparse 导入模块

2)parser = argparse.ArgumentParser() 创建一个解析对象(命令行解析器)
  ArgumentParser对象的相关属性,全部参数:

3)parser.add_argument() 向该对象中添加要关注的命令行参数和选项,每一个add_argument方法对应一个要关注的参数或选项;

add_argument相关属性,全部参数:

属性解释
name or flags一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
action当参数在命令行中出现时使用的动作基本类型。
nargs命令行参数应当消耗的数目。
const被一些 action 和 nargs 选择所需求的常数。
default当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。
type命令行参数应当被转换成的类型。
choices可用的参数的容器。
required此命令行选项是否可省略 (仅选项可用)。
help一个此选项作用的简单描述。
metavar在使用方法消息中使用的参数值示例。
dest被添加到 parse_args() 所返回对象上的属性名。

4)parser.parse_args() 调用parse_args()方法进行解析

parse_args相关属性,全部参数:

属性解释默认值
args要解析的字符串列表从 sys.argv 获取。
namespace用于获取属性的对象一个新的空 Namespace 对象。

三. 具体使用

add_argument() 方法必须知道它是否是一个选项,例如 -f 或 --foo,或是一个位置参数。

第一个传递给 add_argument() 的参数必须是一系列旗标或者是一个简单的参数名。

当 parse_args() 被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数。

-(横杠)和 (双横杠)都是用来表示命令行参数的前缀符号:

-用来表示短参数(Short options),通常只有一个字符。

–用来表示长参数(Long options),通常是一个单词或短语。

在argparse中,-和–可以用来定义命令行参数的简写和全名,例如:parser.add_argument(‘-n’, ‘–name’, help=‘输入姓名’)

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-n', '--name', help='输入姓名')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)

带参执行结果:

3.1 设置必需参数

add_argument方法的required参数可以设置该参数是否是必需。

如果该参数设置为必需参数,程序执行时未指定该参数会报错!

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--name', help='输入姓名', required=True)
    parser.parse_args()
    # 获得传入的参数
    print(args)
    # 获得指定的参数
    print(args.name)

运行 python test.py 和 python test.py --name Elaine

结果:

3.2 传一个参数

add_argument添加一个参数选项

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--name', help='输入姓名')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)
    # 获得指定的参数
    print(args.name)

运行程序 -h 看一下效果

D:\>python test.py -h
usage: test.py [-h] [--name NAME]

optional arguments:
  -h, --help   show this help message and exit
  --name NAME  输入姓名

带一个参数和带三个参数运行的结果:

可以看到,这种情形下传入三个参数会报错!

3.3 传多个参数

1)add_argument加上nargs参数,nargs是用来说明传入的参数个数,例如:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--name', nargs=3, help='输入姓名')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)
    # 获得指定的参数
    print(args.name)

运行 python test.py --name Elaine 和 python test.py --name Elaine Elaine1 Elaine2

结果:

2)nargs为’+’ 表示传入至少一个参数,可以不用指定具体多少个参数,例如:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--name', nargs='+', help='输入姓名')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)
    # 获得指定的参数
    print(args.name)

运行 python test.py --name Elaine 和 python test.py --name Elaine Elaine1 Elaine2

结果:

3.4 位置参数和可选参数

add_argument() 方法必须知道它是否是一个选项,例如 -f 或 --foo,或是一个位置参数。

第一个传递给 add_argument() 的参数必须是一系列旗标或者是一个简单的参数名。

当 parse_args() 被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数。

1)位置参数

add_argument第一个参数可以这么创建:parser.add_argument(‘name’, help=‘输入姓名’)

其中第一个参数可以是任何参数名,但前面不要加 - (横杠)或 (双横杠)

这些参数是不带前缀的参数,它们通常用于需要按特定顺序提供的参数,且通常是必需的。

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='命令行中传入一个参数')
    parser.add_argument('name', help='输入姓名')
    parser.add_argument('country', help='国家')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)

执行 python test.py Elaine China 和 python test.py China Elaine

结果:

所以位置参数都是顺序的,在命令行中传入参数时候,传入的参数的先后顺序不同,运行结果往往会不同!

执行 python test.py Elaine 时缺少第二个位置参数会报错,所以位置参数通常是必须的。例如:

2)可选参数

为了在命令行中避免上述位置参数的顺序混乱,可以使用可选参数。这个很像关键词传参,但是需要在关键词前面加-

例如:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--name', nargs='+', help='输入姓名')
    parser.add_argument('--country', nargs='+', help='国家名称')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)

执行 python test.py --name Elaine Elaine1 Elaine2 和 python test.py --name Elaine Elaine1 Elaine2 --country China

结果:

可选参数虽然写法比较繁琐,但是增加了命令行中的可读性,不容易因为参数传入顺序导致数据错乱。

3.5 参数设置默认值

add_argument加上default参数

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-n', '--name', help='输入姓名')
    parser.add_argument('-c', '--country', default='China', help='国家名称')
    args = parser.parse_args()
    # 获得传入的参数
    print(args)

运行python test.py --name Elaine 和 python test.py

结果:

3.6 其它用法

想要了解更多,可以去看看官方文档

参考官方文档:https://docs.python.org/zh-cn/3.9/library/argparse.html#parents

总结

到此这篇关于python程序运行添加命令行参数argparse模块具体用法的文章就介绍到这了,更多相关python命令行参数argparse模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django实现drf搜索过滤和排序过滤

    Django实现drf搜索过滤和排序过滤

    当我们需要对后台的数据进行过滤的时候,drf有两种,搜索过滤和排序过滤。本文就详细的介绍这两种的实现,感兴趣的可以了解一下
    2021-06-06
  • Python的PIL库中getpixel方法的使用

    Python的PIL库中getpixel方法的使用

    这篇文章主要介绍了Python的PIL库中getpixel方法的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python3.2模拟实现webqq登录

    Python3.2模拟实现webqq登录

    这篇文章主要介绍了Python模拟实现webqq登录的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 详解Python使用OpenCV如何确定一个对象的方向

    详解Python使用OpenCV如何确定一个对象的方向

    在本教程中,我们将构建一个程序,该程序可以使用流行的计算机视觉库 OpenCV 确定对象的方向(即以度为单位的旋转角度),感兴趣的小伙伴可以了解一下
    2022-10-10
  • 使用numpy转换成cupy利用GPU执行错误

    使用numpy转换成cupy利用GPU执行错误

    在使用PyInstaller打包Python程序时,可能会遇到缺少模块的错误,尤其是在将Numpy转换为CuPy以利用GPU加速时,如果遇到ModuleNotFoundError,表明PyInstaller没有包含一些隐式导入的包,解决方法是手动将缺失的包添加到打包目录中
    2024-09-09
  • Python数据类型之Dict字典实例详解

    Python数据类型之Dict字典实例详解

    这篇文章主要介绍了Python数据类型之Dict字典,结合具体实例形式详细分析了Python字典的概念、原理、定义、元素添加、删除、遍历等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Pyhton中防止SQL注入的方法

    Pyhton中防止SQL注入的方法

    这篇文章主要介绍了Pyhton中防止SQL注入的方法,本文讲解的方法简单实用,需要的朋友可以参考下
    2015-02-02
  • Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】

    Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】

    这篇文章主要介绍了Python基于聚类算法实现密度聚类(DBSCAN)计算,结合实例形式分析了聚类算法的相关概念、原理及使用聚类算法进行密度聚类计算的相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法

    pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法

    今天小编就为大家分享一篇pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python使用pandas处理excel文件转为csv文件的方法示例

    python使用pandas处理excel文件转为csv文件的方法示例

    这篇文章主要介绍了python使用pandas处理excel文件转为csv文件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论