python中argparse模块基础及使用步骤
作者:A-L-Kun 发布时间:2023-01-26 19:21:59
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)
来源:https://www.cnblogs.com/liuzhongkun/p/16387803.html


猜你喜欢
- 本文主要是讲解Spark在Windows环境是如何搭建的一、JDK的安装1、1 下载JDK首先需要安装JDK,并且将环境变量配置好,如果已经
- 当项目里用npm安装了babel-cli之类的包时,webstorm在索引node_modules文件时,会卡死接近这个问题的办法是把nod
- 概述从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类
- 前言今天为大家带来解闷用的过迷宫小游戏分享给大家好了。让我们愉快地开始吧~开发工具Python版本: 3.6.4相关模块:pygame模块;
- 前言:一个完整的 HTTP 请求,包括客户端向服务端发送的 Request 请求和服务器端发送的 Response 响应。为了能方便的访问获
- 本文实例为大家分享了opencv矿石图片检测矿石数量的具体代码,供大家参考,具体内容如下原始矿石图片此类图片是高躁图,二值化后图像如下采用膨
- 1、标识符与关键字在了解数据类型之前,先了解一下go的标识符和关键字1.1 标识符在编程语言中标识符就是定义的具有某种意义的词,比如变量名、
- 实现了我的小跳槽以后,从8月7号入职了现在的这家公司,我好像是加入了救火队的行列,还没有开始开发新的模块,只是一直在实现已经上线模块中的新需
- 最近用到Python自动发送邮件,主要就是三步,登录邮件、写邮件内容、发送,用到的库是 smtplib 和 email,直接使用pip安装即
- 本文实例讲述了Python面向对象思想与应用。分享给大家供大家参考,具体如下:面向对象思想1、面向对象的设计思想面向对象是基于万物皆对象这个
- 使用WebDriver在Chrome浏览器上进行测试时,需要从http://chromedriver.storage.googleapis.
- 一、相关知识点讲解1.1 需要使用的相关库import numpy as npimport pand
- 一、函数概述简单来说 函数 就是自己定义的一段 小程序 方便自己调取使用def 用来定义函数的关键字 也就是这个函数的名字函数运行到retu
- ⛳️ 实战场景本篇博客为大家再次带来 Go 语言的基础知识,这次要学习的内容是 Go 中的文件操作。打开关闭文件在 Go 中操作文件,首先要
- #region 读写xml文件的2个小函数,2005 4 2 by hyc public void 
- 本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:静态属性<?phpclass StaticExample
- 本文实例讲述了Python3对称加密算法AES、DES3。分享给大家供大家参考,具体如下:python3.6此库安装方式,需要pip3 in
- 本文实例讲述了Python使用urllib2模块实现断点续传下载的方法。分享给大家供大家参考。具体分析如下:在使用HTTP协议进行下载的时候
- asp读取access数据库表名称的代码:<%strConn="DBQ="+server.mappath(&quo
- 我认为,出现这个问题的原因有以下几点: 1、客户端禁用了cookie 2、浏览器出现问题,暂时无法存取cookie 3、php.ini中的s