加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

argparse模块的概念 用法及实际运用是什么

发布时间:2023-09-14 12:50:43 所属栏目:语言 来源:
导读:在实际应用中,我们有时候会遇到“argparse模块的概念,用法及实际应用是什么”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“argparse模块的概念,用法及实际应用是什么&rd

在实际应用中,我们有时候会遇到“argparse模块的概念,用法及实际应用是什么”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“argparse模块的概念,用法及实际应用是什么”文章能帮助大家解决问题。

一、 概念

argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。

官方文档的位置:【https://docs.python.org/zh-cn/3/library/argparse.html】

在这里我们利用git来演示命令行运行

git -h

git -version

git show

二、 基础

1、 使用步骤

1.1 总步骤

1.导包:

import argparse

2.创建对象:

parser = argparse.ArgumentParser()

3.添加参数:

parser.add_argument()

4.解析参数:

parser.parse_args()

1.2 创建对象

parser = ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-',fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)

参数说明:

prog:程序的名字,默认为sys.argv[0],用来在help信息中描述程序的名称

usag:描述程序用途的字符串

description:help信息前的文字

epilog:help信息之后的信息

add_help:是否添加帮助信息

prefix_chars:参数前缀,默认为-

fromfile_prefix_chars:前缀字符,放在文件名之前

argument_default:参数的全局默认值

conflict_hander:对冲突的处理方式,默认为返回错误“error”。还有“resolve”,智能解决冲突。当用户给程序添加了两个一样的命令参数时,“error”就直接报错,提醒用户。而“resolve”则会去掉第一次出现的命令参数重复的部分或者全部(可能是短命令冲突或者全都冲突)

1.3 添加参数

add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数说明:

name or flags:参数有两种,可选参数和位置参数。parse_args()运行时,会用-来认证可选参数,剩下的即为位置参数。位置参数必选,可选参数可选

# 可选参数

parser.add_argument("-f", "--foo")

# 位置参数

parser.add_argument("bar") # 位置参数在运行时一定要输入

action:动作,argparse内置6种动作可以在解析到一个参数时进行触发

store:保存参数值,可能会先将参数值转换成另一个数据类型。默认动作为这个

store_const:保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记

stroe_true/store_false:保存相应的布尔值,这两个动作被用于实现布尔开关

append:将值保存到一个列表中。若参数重复出现,则保存多个值

append_const:将一个定义在参数规格中的值保存到一个列表中

version:打印关于程序的版本信息,然后退出

parse.add_argument('--version',action = 'version',version = '%(prog)s2.0')

nargs:参数的数量

值可以为整数,*(任意多个),+(一个或更多)

首先从命令行获取参数,若没有则从const获得,然后从default获得

dest:参数值就保存为parse_args()返回的命名空间对象中为该dest参数值的一个属性。如果提供dest="a",那么可以通过args.a访问该参数

default:设置参数的默认值

type:把从命令行输入的结果转成设置的类型

choice:允许的参数值

requires:是否必选

desk:可作为参数名

help:参数命令的介绍

参数的几种写法:

python py.py -i 1 # 使用空格分开

python py.py --integer=1 # 长选项使用等号分开

python py.py -i1 # 短选项可以写一起

1.4 解析参数

args = parser.parse_args() # 括号里面可以传入命令行的参数

args_ = parser.parse_args("-i=1".split("="))

三、 使用案例

我们可以创建一个模板:

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

__author__ = "A.L.Kun"

__file__ = "demo01.py"

__time__ = "2022/6/16 17:12"

__email__ = "liu.zhong.kun@foxmail.com"

from typing import Callable

from functools import wraps

import sys, argparse

def terminal(param: bool = False): # 判断是否要使用命令行参数

def get_params(fun: Callable):

if param:

parser = argparse.ArgumentParser(description="help document")

"---------------------------------------------------------------"

# 如果需要从命令行传入参数时,就在这里添加

"---------------------------------------------------------------"

args = parser.parse_args()

else:

args = None

@wraps(fun)

def inner():

ret = fun(args) # 可能在传参数是还要进行其他的初始化操作

return ret

return inner

return get_params

@terminal() # 使用装饰器

def main(args):

print(args)

if __name__ == "__main__":

main()

sys.exit(0)

使用案例,创建一个程序,可以连接邮箱的SMTP服务

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

__author__ = "A.L.Kun"

__file__ = "demo01.py"

__time__ = "2022/6/16 17:12"

__email__ = "liu.zhong.kun@foxmail.com"

from smtplib import SMTP

from typing import Callable

from functools import wraps

import sys, argparse

def terminal(param: bool = False):

def get_params(fun: Callable):

if param:

parser = argparse.ArgumentParser(description="help document")

"---------------------------------------------------------------"

parser.add_argument('--version', "-v", action='version', version='%(prog)s 2.0')

parser.add_argument("-u", "--username", type=str, help="Enter the SMTP server account", required=True)

parser.add_argument("-p", "--password", type=str, help="Enter the SMTP server password", required=True)

"---------------------------------------------------------------"

args = parser.parse_args()

else:

args = None

@wraps(fun)

def inner():

ret = fun(args)

return ret

return inner

return get_params

@terminal(True)

def main(args):

smtp = SMTP('smtp.qq.com')

smtp.login(args.username, args.password)

smtp.quit()

smtp.close()

if __name__ == "__main__":

main()

sys.exit(0)

现在大家对于argparse模块的概念,用法及实际应用是什么的内容应该都有一定的认识了吧,希望这篇能对大家有所帮助。最后,想要了解更多,群英网络将为大家推送更多相关的文章。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章