python argparse命令行参数解析(推荐)

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

test.py

# -*- coding: utf-8 -*-
import argparse

# (1) 声明一个parser对象,该对象包含将命令行解析成 Python 数据类型所需的全部信息。
ap = argparse.ArgumentParser(description=\'Process some integers.\')

# (2) 添加参数
ap.add_argument(\"first\")  # 位置参数,这里表示第一个出现的参数赋值给first
ap.add_argument(\"--digit\", type=int, help=\"输入数字\")  # 声明一个int类型参数
ap.add_argument(\"--name\", help=\"名字\", default=\"dog\")  # 同上,default 表示默认值

# (3) 读取命令行参数
args = ap.parse_args()

# (4) 调用这些参数
print(args.first)
print(args.digit)
print(\"name = {}\".format(args.name))

调用

python test.py position_arg --name qwe

ArgumentParser对象
(1)prog – 程序的名称(默认: sys.argv[0])
(2)usage – 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
(3)description – 在参数帮助文档之后显示的文本 (默认值:无)
(4)epilog – 在参数帮助文档之后显示的文本(默认值:无)
(5)parents – 一个 ap对象的列表,它们的参数也应包含在内
(6)formatter_class – 用于自定义帮助文档输出格式的类
(7)prefix_chars – 可选参数的前缀字符集合(默认值:\’-\’)
(8)fromfile_prefix_chars – 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None)
(8)argument_default – 参数的全局默认值(默认值: None)
(9)conflict_handler – 解决冲突选项的策略(通常是不必要的)
(10)add_help – 为解析器添加一个 -h/–help 选项(默认值: True)
(11)allow_abbrev – 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)

add_argument()方法
(1)name or flags – 一个命名或者一个选项字符串的列表。(例如 foo 或 -f, –foo)
(2)action – 表示该选项要执行的操作
(3)default – 默认值
(4)dest – 用来指定参数的位置,被添加到 parse_args() 所返回对象上的属性名。
(5)type – 为参数类型。(例如int)
(6)choices – 用来选择输入参数的范围。(例如choice = [1, 5, 10])
(7)help – 用来描述这个选项的作用
(8)nargs – 命令行参数应当消耗的数目。
(9)const – 被一些 action 和 nargs 选择所需求的常数。
(10)required – 此命令行选项是否可省略 (仅选项可用)。
(11)metavar – 在使用方法消息中使用的参数值示例。

import argparse
import logging

\"\"\"
\" File Description:
\" dump model && deploy
\"
\" Created by zz on 2021/6/22.
\" Mail: zz@baidu.com
\"\"\"
logging.basicConfig(level=logging.DEBUG)


def parse_args():
	ap = argparse.ArgumentParser(prog=\"deploy tool\", description=\'dump or calib model && deploy\')
	ap.add_argument(\"deploy_path\", type=str, help=\"deploy base path\")
	ap.add_argument(\"exp_name\", type=str, help=\"train exp name\")
	subparser = ap.add_subparsers(title=\"model deploy subparser\", dest=\"mode\")

	# subparser
	model_deploy_parser = subparser.add_parser(\"model\", help=\"model deploy\")
	model_deploy_parser.add_argument(\"--default\", default=False, type=bool, help=\"whether that\'s default model\")

	calib_deploy_parser = subparser.add_parser(\"calib\", help=\"offline calib deploy\")
	calib_deploy_parser.add_argument(\"--input\", required=True, type=str, help=\"model offline calib file\")

	args = ap.parse_args()
	return args

# global args
args = parse_args()
mode = args.mode
deploy_path = args.deploy_path
exp_name = args.exp_name

def main():
	if mode == \"model\":
		_deploy_model()
	elif mode == \"calib\":
		_deploy_calib()
	else:
		logging.error( \"Mode error\")

if __name__ == \'__main__\':
	main()
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容