python标准库argparse,脚本传参

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

argparse和sys.argv()功能类似,主要用于编写命令行接口:对于程序所需要的参数,它可以进行正确的解析。此外,argparse可以自动的生成help(帮助)和usage(用法)信息,当程序的参数无效时,可以自动生成错误信息。

sys.argv()能应付简单的参数,但参数稍微复杂点,解析起来就非常麻烦,这时可用argparse库

你可以很容易地为你的 Python 脚本添加命令行参数和选项,并解析它们。下面是一个简单的介绍和示例

# 导入库
import argparse

# 定义命令行解析器对象
parser = argparse.ArgumentParser(description="test for use argparse")

# 添加命令行参数
# 位置参数,它表示用户必须提供的值
parser.add_argument("id", type=int, default=1)
# 可选参数,也称为选项
parser.add_argument("--name", type=str, default="tom")
# metavar 是用来在帮助信息中显示的参数名称。
# type 指定了参数的类型。
# nargs 指定了应该读取多少个命令行参数。
# help 提供了参数的描述。
# dest 指定了参数在解析后的命名空间中的名称。
# action 定义了当参数在命令行中出现时应该采取的动作

# 从命令行中结构化解析参数,返回一个命名空间,其中包含了所有解析后的参数
args = parser.parse_args()
print(args)

id = args.id
name = args.name
print(id, "------------", name)

# 以上内容输出
# python3 jira_login.py id 3 --name xiaoming
# Namespace(id=3, name='xiaoming')
# 3 ------------ xiaoming

位置参数

import argparse
from enum import Enum
from typing import Union

if __name__ == '__main__':
    # 用ArgumentParser类实例化即可创建一个总的容器类parser
    parser = argparse.ArgumentParser(description='命令行中传入参数')
    parser.add_argument('num1', type=int,default=1)
    parser.add_argument('num2', type=int, default=2)
    parser.add_argument('-a', '--age', type=int, help="this is age", default=18, required=False)
    parser.add_argument('-ht', '--height', type=int, help="this is height", default=100, required=False)
    parser.add_argument('--name', type=str, help="this is height", default='zhangsan', required=False)
    args = parser.parse_args()
    num1 = args.num1
    num2 = args.num2
    print(num1+num2)
    print(args.age)
    print(args.height)
    print(args.name)

# output
>>> python s1.py 1 2 -a 19 -ht 120 --name 1234
3
19
120
1234

# -h output
>>> python s1.py -h
usage: s1.py [-h] [-a AGE] [-ht HEIGHT] [--name NAME] num1 num2

命令行中传入参数

positional arguments:
  num1
  num2

optional arguments:
  -h, --help            show this help message and exit
  -a AGE, --age AGE     this is age
  -ht HEIGHT, --height HEIGHT
                        this is height
  --name NAME           this is height

argparse三个主要函数

(1)parser=argparse.ArgumentParser()
ArgumentParser对象保存了所有必须的信息,用于将命令行参数解析为相应的python数据类型。
ArgumentParse对象:

class argparse.ArgumentParser(
prog=None,        #程序的名称 (默认值: os.path.basename(sys.argv[0]))
usage=None,       #描述程序用途的字符串(默认值:从添加到解析器的参数生成)
description=None, #要在参数帮助信息之前显示的文本(默认:无文本)
epilog=None,      #要在参数帮助信息之后显示的文本(默认:无文本)
parents=[],       #一个 ArgumentParser 对象的列表,它们的参数也应包含在内
formatter_class=argparse.HelpFormatter, #用于自定义帮助文档输出格式的类
prefix_chars='-',  #可选参数的前缀字符集合(默认值: '-')
fromfile_prefix_chars=None,  #当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None)
argument_default=None, #参数的全局默认值(默认值: None)
conflict_handler='error', #解决冲突选项的策略(通常是不必要的)
add_help=True,     #为解析器添加一个 -h/--help 选项(默认值: True)
allow_abbrev=True, #如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
exit_on_error=True)#决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

(2)parser.add_argument()
add_argument()函数是向ArgumentParser对象添加命令行参数信息,这些信息告诉ArgumentParser对象如何处理命令行参数。可以通过调用parse_agrs()来使用这些命令行参数,将会返回一个对象。

ArgumentParser.add_argument(
name or flags,#一个命名或者一个选项字符串的列表,如 foo 或 -f, --foo:带有--的为可选参数(optional parameter);带-为可选参数的别名,不带--的为必选参数(positional parameter)
action,#参数的处理方法,在命令行遇到此参数时要采取的基本操作类型
nargs,#参数的数量,应该使用的命令行参数的数量
const,#参数的常量值,被一些 action 和 nargs 选择所需求的常数。
default,#参数的默认值,如果命令行不存在的参数,则生成的值
type,#参数的数据类型,应转换命令行参数类型
choices,#参数的取值范围,参数允许值的范围
requires,#参数是否可以忽略不写(仅选项可用),True:不可忽略,false:可忽略
help,#参数的说明信息,简单描述参数的作用
metavar,#参数在说明信息usage(用法)中的名称,用法消息中的名称
dest#对象的属性名, 被添加到 parse_args() 所返回对象上的属性名。
)

# nargs 参数用于指定一个参数应该接受的命令行参数数量。它可以取以下几种值:
N:表示参数应该接受 N 个命令行参数
?:表示参数可以接受零个或一个命令行参数。如果没有提供命令行参数,则该参数的值为 None
*:表示参数可以接受零个或多个命令行参数。命令行参数会被收集到一个列表中
+:表示参数可以接受一个或多个命令行参数。命令行参数会被收集到一个列表中
# 范例
parser.add_argument('--inputs', nargs='+')
>>> python test.py --inputs 1 2 3 4

(3)args = parser.parse_args()
通过调用parse_args()函数来解析ArgumentParser对象中保存的命令行参数:将命令行参数解析成相应的数据类型并采取相应的动作,返回一个Namespace对象。

#将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。

ArgumentParser.parse_args(
args=None,     #要解析的字符串列表。 默认值是从 sys.argv 获取。
namespace=None #用于获取属性的对象。 默认值是一个新的空 Namespace 对象
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lance_mu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值