1-Python - argparse

about

argparse是Python标准库种推荐的命令行解析模块,用来在Python3种替代老旧的optparse模块。

install

pip install argparse

pip install argparse==1.4.0
pip install -i https://pypi.doubanio.com/simple argparse==1.4.0

usage

win10 + python3.6.6 + argparse1.4.0

首先,在D:\tmp目录下有个test.py文件,后续所有的代码示例都在这个文件中进行演示。

从命令行获取指定参数:

import argparse

parse = argparse.ArgumentParser(description="这是测试脚本")  # description用来在命令行返回帮助信息
parse.add_argument(
    '--user',  # 通过 -- 设置参数
    type=str,  # 可选参数,限制该参数的类型 str、float、int、bool, 默认为 str
    required=True,  # 可选参数,是否必传,如果没有default的话不传报错,
    default='张开',  # 可选参数,默认值
    choices=['张开', '张不开', '张小开'],  # 可选参数,限制值的范围,
    help="user argument help info",  # 可选参数,返回该参数的帮助信息
)

print(parse.parse_args())  # 获取输入将被parse.parse_args接收

args = parse.parse_args()
print(args.user)  # 直接可以点出来参数名获取输入值
"""
D:\tmp>python test.py --user 张开
Namespace(user='张开')
张开
"""

上例是一个简单的从终端设置user参数,并且对该参数的一些限制设置。
注意,parse.add_argument方法只能添加一个参数,并且为该参数添加限制设置。
想要在终端中添加多个参数怎么办?可以通过多次调用parse.add_argument方法实现,如下示例:

import argparse

parse = argparse.ArgumentParser(description="这是测试脚本")  # description用来在命令行返回帮助信息
parse.add_argument('--user', default='张开')
parse.add_argument('--pwd', default='666')

args = parse.parse_args()
print(args)
print(args.user)
print(args.pwd)
"""
D:\tmp>python test.py --user 张开 --pwd 666
Namespace(pwd='666', user='张开')
张开
666
"""

现在,还有些要补充的是,parse.add_argument方法接收--开头的参数,但也接收-开头的参数。
一般有个默认成俗的规矩是--开头的是设置参数的全名,而-则是--的缩写形式,例如--password简写为-p

import argparse

parse = argparse.ArgumentParser(description="这是测试脚本")  # description用来在命令行返回帮助信息
parse.add_argument('--user', default='张开')
parse.add_argument('-p', default='666')

args = parse.parse_args()
print(args)
print(args.user)
print(args.p)
"""
D:\tmp>python test.py --user 张开 -p 666
Namespace(p='666', user='张开')
张开
666
"""

有些时候,你可能需要对变量进行分组处理:

import argparse
parse = argparse.ArgumentParser(description="这是测试脚本")  # description用来在命令行返回帮助信息
parse.add_argument_group(title='foo options')

parse.add_argument('--foo_user')
parse.add_argument('--foo_pwd')
parse.add_argument_group(title='bar options')
parse.add_argument('--bar_user')
parse.add_argument('--bar_pwd')
print(parse.parse_args())
args = parse.parse_args()
print(args.foo_user,args.foo_pwd)
"""
D:\tmp>python test.py --foo_user 张开 --foo_pwd 123 --bar_user 张不开 --bar_pwd 888
Namespace(bar_pwd='888', bar_user='张不开', foo_pwd='123', foo_user='张开')
张开 123
"""

接收列表形式的参数

import argparse

parse = argparse.ArgumentParser(description="这是测试脚本")  # description用来在命令行返回帮助信息
# parse.add_argument('--l1', nargs='+', type=int, default=[1, 2, 3, 4])
# args = parse.parse_args()
# print(args.l1)
"""
(base) D:\tmp>python test.py --l1 20 21 23 24
[20, 21, 23, 24]
"""

# parse.add_argument('--l2',  type=list, default=[1, 2, 3, 4])
# args = parse.parse_args()
# print(args.l2)
"""
(base) D:\tmp>python test.py --l2 20 21
[['2', '0'], ['2', '1']]

(base) D:\tmp>python test.py --l2 2021
[['2', '0', '2', '1']]

(base) D:\tmp>python test.py --l2 2021
['2', '0', '2', '1']

(base) D:\tmp>python test.py --l2 20 21
usage: test.py [-h] [--l1 L1 [L1 ...]] [--l2 L2]
test.py: error: unrecognized arguments: 21

(base) D:\tmp>python test.py --l2 20,21
['2', '0', ',', '2', '1']
"""

# parse.add_argument('--l3', nargs='+')
# args = parse.parse_args()
# print(args.l3)
"""
(base) D:\tmp>python test.py --l3 20,21 23 24
['20,21', '23', '24']
"""


# parse.add_argument('--l4', action='append')
# args = parse.parse_args()
# print(args.l4)
"""
(base) D:\tmp>python test.py --l4 20 --l4 21 --l4 22 --l4 23
['20', '21', '22', '23']
"""

that's all,see also: [argparse基本用法](https://blog.csdn.net/yy_diego/article/details/82851661) | | [argparse简要用法总结](http://vra.github.io/2017/12/02/argparse-usage/) | [Argparse 教程](https://docs.python.org/zh-cn/3/howto/argparse.html) | [https://pypi.org/project/argparse/](https://pypi.org/project/argparse/) | [python中argparse如何传入列表作为参数](https://blog.csdn.net/kinggang2017/article/details/94036386)
posted @ 2020-12-07 11:10  听雨危楼  阅读(788)  评论(0编辑  收藏  举报