Python笔记:argparse 命令行模块的使用

argparse 是什么

argparse是Python标准库中推荐的命令行解析模块,可以轻松地为命令行参数编写用户友好型命令行界面。

测试环境

  • Mac
  • python3

导入模块

#!/usr/bin/env python
# encoding: utf-8

import argparse

必选参数

parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

测试:

$ python test.py wowo
wowo


可选参数

parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
        print(args) # Namespace(verbosity='2')
        print(args.verbosity) # 2
        print("verbosity turned on") # verbosity turned on

测试:

$ python test.py --verbosity 2
Namespace(verbosity=‘2’)
2
verbosity turned on


默认无参数错误示例

parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
        print("verbosity turned on")

测试:

$ python test.py -v
usage: test.py [-h] [-v VERBOSITY]
test.py: error: argument -v/–verbosity: expected one argument


支持无参数的写法

parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity", action="store_true")
args = parser.parse_args()
if args.verbosity:
        print("verbosity turned on")

测试:

$ python test.py -v
verbosity turned on


type 类型

parser = argparse.ArgumentParser()
parser.add_argument('x', type=int, help="the base")
args = parser.parse_args()
answer = args.x ** 2 # 此处是开方运算
print(answer)

测试:

正确示例:
$ python test.py 3
9
$ python test.py ‘31’
961

错误示例:
$ python test.py ‘31a’
usage: test.py [-h] x
test.py: error: argument x: invalid int value: ‘31a’


支持参数限定范围

parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square ** 2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

测试:

$ python test.py 1 -v 2
the square of 1 equals 1

$ python test.py 1 -v 1
1^2 == 1

$ python test.py 1 -v 0
1

$ python test.py 1 -v 3
usage: test.py [-h] [-v {0,1,2}] square
test.py: error: argument -v/–verbosity: invalid choice: 3 (choose from 0, 1, 2)

$ python test.py 1
1


全局注释和互斥参数

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x ** args.y

if args.quiet:
    print(answer)
elif args.verbose:
    print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
    print("{}^{} == {}".format(args.x, args.y, answer))

测试:

$ python test.py -h
usage: test.py [-h] [-v | -q] x y

calculate X to the power of Y

positional arguments:
x the base
y the exponent

optional arguments:
-h, --help show this help message and exit
-v, --verbose
-q, --quiet

$ python test.py -v 2 3
2 to the power 3 equals 8

$ python test.py -q 2 3
8

$ python test.py 2 3
2^3 == 8

说明:-q-v 是互斥的参数, 可以看出,-q-v不出现,或仅出现一个都可以,同时出现就会报错。


给参数设定默认值

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], default=1,
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

测试:

$ python test.py 2
2^2 == 4

$ python test.py 2 -v 2
the square of 2 equals 4

$ python test.py 2 -v 0
4


学习链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wang's Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值