Python3之argparse模块--解析命令行读取参数

argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。比如如下名为test.py的脚本:

import sys
print("Input argument is {}" .format(sys.argv))

在shell脚本中运行python test.py help可以得到Input argument is [‘test.py’, ‘help’]的结果。

1)一般形式

但是大多数情况下,脚本很可能需要多个参数,而且每次参数的类型用处各不相同,那么这个时候在参数前添加标签表明参数的类型和用途便十分有用,而利用argparse模块可以很方便得实现这一目的。

同样用名为test.py的脚本:

import argparse

# description参数可以用于插入描述脚本用途的信息,可以为空
argparser = argparse.ArgumentParser(description='train and evaluate YOLO_v3 model on any dataset')
# 添加--conf标签,标签别名可以为-c,help参数用于描述--conf参数的用途或意义。
argparser.add_argument('-c', '--conf', help='path to configuration file')

# 将变量以标签-值的字典形式存入args字典
args = argparser.parse_args()


if args.conf:
    print("conf mode on!")
else:
    print("conf mode off!")

运行python test.py后面跟了–verbose/-v的时候会输出前者,如果什么都没有会输出后者。如果输入了–verbose/-v以外的参数则会报错:unrecognized arguments

2)必须参数

这种模式用于确保某些必需的参数有输入。

parser.add_argument('--conf', required=True, type=int)

required标签就是说–conf参数是必需的,并且类型为int,输入别的类型会报错。

3)位置参数(positional arguments)

位置参数与sys.argv调用比较像,参数没有显式的–xxx或者-xxx标签,因此调用属性也与sys.argv相同。

# 输入的第一个参数赋予名为filename的键
parser.add_argument('filename')
args = parser.parse_args()
print("Read in {}" .format(args.filename))

输入python test.py test.txt则会输出Read in test.txt

此外,可以用nargs参数来限定输入的位置参数的个数,默认为1。当然nargs参数也可用于普通带标签的参数。

parser.add_argument(‘num’, nargs=2, type=int)表示脚本可以读入两个整数赋予num键(此时的值为2个整数的数组)。nargs还可以 '*‘用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;‘+’表示读取至少1个该位置参数。’?'表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)比如用:

parser.add_argument('filename')
parser.add_argument('num', nargs='*)

就可以运行python test.py text.txt 1 2

由于没有标签,所以用位置参数的时候需要比较小心。

4)输入类型

之前已经提到了用type参数就可以指定输入的参数类型。而这个type类型还可以表示文件操作的类型从而直接进行文件的读写操作。

# 读取文件
parser.add_argument('file', type=argparser.FileType('r'))
args = parser.parse_args()
for line in args.file:
    print(line.strip())

5)参数默认值

一般情况下会设置一些默认参数从而不需要每次输入某些不需要变动的参数,利用default参数即可实现。

parser.add_argument('filename', default='text.txt')

这个时候至直接运行python text.py就能得到Read in text.txt而不需要输入文件名了。

6)候选参数选择

表示该参数能接受的值只能来自某几个值候选值中,除此以外会报错,用choices参数即可。比如:

parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])

参考:
https://www.cnblogs.com/arkenstone/p/6250782.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值