首页/文章/ 详情

python的argvparse模块的使用方法大全

1年前浏览373

怎么在运行python程序时,直接在命令行就指定一些参数呢?

转载一篇最近常观摩的文章。

原文出处:

内容如下。

1. 简介

通过argparse模块,可以轻松编写用户友好的命令行界面。它解析sys.argv中定义的参数。

argparse模块还会自动生成帮助和使用消息,并在用户为程序提供无效参数时发出错误。

argparse是标准模块;我们不需要安装它。

使用ArgumentParser创建一个解析器,并使用add_argument()添加一个新参数。参数可以是可选的,必需的或定位的。


2. 可选参数









#!/usr/bin/env pythonimport argparseparser = argparse.ArgumentParser()parser.add_argument('-o', '--output', action='store_true',     help="shows output")args = parser.parse_args()if args.output:    print("This is some output")

执行:

























[root@localhost python]# python optional_arg.py[root@localhost python]# python optional_arg.py -oThis is some output[root@localhost python]# python optional_arg.py -outputusage: optional_arg.py [-h] [-o]optional_arg.py: error: argument -o/--output: ignored explicit argument 'utput'
[root@localhost python]# python optional_arg.py --outputThis is some output
[root@localhost python]# python optional_arg.py --helpusage: optional_arg.py [-h] [-o]
optional arguments:  -h, --help    show this help message and exit  -o, --output  shows output

[root@localhost python]# python optional_arg.py -husage: optional_arg.py [-h] [-o]
optional arguments:  -h, --help    show this help message and exit  -o, --output  shows output

3. 必需参数

required_arg.py








#!/usr/bin/env pythonimport argparse# required argparser = argparse.ArgumentParser()parser.add_argument('--name', required=True)args = parser.parse_args()print(f'Hello {args.name}')

该示例必须指定name选项;否则失败






[root@localhost python]# python3 required_arg.py usage: required_arg.py [-h] --name NAMErequired_arg.py: error: the following arguments are required: --name[root@localhost python]# python3 required_arg.py --name hugoHello hugo

4. 位置参数

以下示例适用于位置参数。它们是使用add_argument()创建的。
positional_arg.py
















#!/usr/bin/env python
import argparse
# positional args
parser = argparse.ArgumentParser()
parser.add_argument('name')parser.add_argument('age')
args = parser.parse_args()
print(f'{args.name} is {args.age} years old')

执行:







[root@localhost python]# python3 positional_arg.pyusage: positional_arg.py [-h] name agepositional_arg.py: error: the following arguments are required: name, age
[root@localhost python]# python3 positional_arg.py hugo 24hugo is 24 years old


5. argparse 目标

add_argument()dest选项为参数指定名称。

如果未给出,则从选项中推断出来。
dest.py













#!/usr/bin/env pythonimport argparseimport datetime# dest gives a different name to a flagparser = argparse.ArgumentParser()parser.add_argument('-n', dest='now', action='store_true', help="shows now")args = parser.parse_args()# we can refer to the flag# by a new nameif args.now:    now = datetime.datetime.now()    print(f"Now: {now}")

执行:



$ dest.py -nNow: 2019-03-22 17:37:40.406571


6. argparse 类型

type参数确定参数类型。

rand_int.py













#!/usr/bin/env python
import argparseimport random# type determines the type of the argumentparser = argparse.ArgumentParser()parser.add_argument('-n', type=int, required=True,    help="define the number of random integers")args = parser.parse_args()n = args.nfor i in range(n):    print(random.randint(-100100))

执行:





$ rand_int.py -n 392-61-61


7. argparse 默认

如果未指定default选项,则指定默认值。

power.py















#!/usr/bin/env pythonimport argparse# required defines a mandatory argument # default defines a default value if not specifiedparser = argparse.ArgumentParser()parser.add_argument('-b', type=int, required=True, help="defines the base value")parser.add_argument('-e', type=int, default=2, help="defines the exponent value")args = parser.parse_args()val = 1base = args.bexp = args.efor i in range(exp):    val *= baseprint(val)

该示例计算指数。不需要指数值;如果未给出,则默认值为 2。

执行:





$ power.py -b 39$ power.py -b 3 -e 327


8. argparse metavar

metavar选项为错误的期望值命名,并提供帮助输出。

metavar.py












#!/usr/bin/env pythonimport argparse# metavar gives name to the expected value # in error and help outputsparser = argparse.ArgumentParser()parser.add_argument('-v', type=int, required=True, metavar='value',     help="computes cube for the given value")args = parser.parse_args()print(args)val = args.vprint(val * val * val)

执行:
















[root@localhost python]# python3 metavar.py usage: metavar.py [-h] -v valuemetavar.py: error: the following arguments are required: -v[root@localhost python]# python3 metavar.py -husage: metavar.py [-h] -v value
optional arguments:  -h, --help  show this help message and exit  -v value    computes cube for the given value[root@localhost python]# python3 metavar.py -v usage: metavar.py [-h] -v valuemetavar.py: error: argument -v: expected one argument[root@localhost python]# python3 metavar.py -v 3Namespace(v=3)27


9. argparse 追加操作

append操作允许对重复选项进行分组。

appending.py












#!/usr/bin/env pythonimport argparse# append action allows to group repeating# optionsparser = argparse.ArgumentParser()parser.add_argument('-n', '--name', dest='names', action='append',     help="provides names to greet")args = parser.parse_args()names = args.namesfor name in names:    print(f'Hello {name}!')

该示例生成问候语,并使用n或name选项指定所有名称。它们可以重复多次重复。








[root@localhost python]# python3 appending.py 3usage: appending.py [-h] [-n NAMES]appending.py: error: unrecognized arguments: 3[root@localhost python]# python3 appending.py -n Perter -n Lucy --name JaneHello Perter!Hello Lucy!Hello Jane!


10. argparse nargs

nargs指定应使用的命令行参数的数量。

charseq.py
























#!/usr/bin/env python
import argparseimport sys# nargs sets the required number of argument values# metavar gives name to argument values in error and help outputparser = argparse.ArgumentParser()parser.add_argument('chars', type=str, nargs=2, metavar='c',                    help='starting and ending character')args = parser.parse_args()try:    v1 = ord(args.chars[0])    v2 = ord(args.chars[1])except TypeError as e:    print('Error: arguments must be characters')    parser.print_help()    sys.exit(1)
if v1 > v2:    print('first letter must precede the second in alphabet')    parser.print_help()    sys.exit(1)

该示例显示了从字符一到字符二的字符序列。它需要两个参数。使用nargs=2,我们指定期望两个参数。




$ charseq.py e ke f g h i j k

上述程序显示从 e 到 k 的字符序列。


但是也可以使用*字符设置可变数量的参数。

var_args.py









#!/usr/bin/env pythonimport argparse# * nargs expects 0 or more argumentsparser = argparse.ArgumentParser()parser.add_argument('num', type=int, nargs='*')args = parser.parse_args()print(f"The sum of values is {sum(args.num)}")

执行:



$ var_args.py 1 2 3 4 5The sum of values is 15


11. argparse 选择

choices选项将参数限制为给定列表。
mytime.py



























#!/usr/bin/env python
import argparseimport datetimeimport time
# choices limits argument values to the # given list
parser = argparse.ArgumentParser()
parser.add_argument('--now', dest='format', choices=['std', 'iso', 'unix', 'tz'],                    help="shows datetime in given format")
args = parser.parse_args()fmt = args.format
if fmt == 'std':    print(datetime.date.today())elif fmt == 'iso':    print(datetime.datetime.now().isoformat())elif fmt == 'unix':    print(time.time())elif fmt == 'tz':    print(datetime.datetime.now(datetime.timezone.utc))

在示例中,now选项可以接受以下值:std,iso,unix或tz。

执行:













[root@localhost python]# python3 mytime.py[root@localhost python]# python3 mytime.py --nowusage: mytime.py [-h] [--now {std,iso,unix,tz}]mytime.py: error: argument --now: expected one argument[root@localhost python]# python3 mytime.py --now std2021-11-08[root@localhost python]# python3 mytime.py --now iso2021-11-08T15:06:06.640909[root@localhost python]# python3 mytime.py --now unix1636355170.17874[root@localhost python]# python3 mytime.py --now tz2021-11-08 07:06:14.381828+00:00

原文完。

来源:车路慢慢

python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-22
最近编辑:1年前
李慢慢
硕士 自动驾驶仿真工程师一枚
获赞 11粉丝 71文章 122课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈