使用到的方法为 argparse.ArgumentParser() ,此模块有中文文档,建议链接 到官方中文文档中查看。
此模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse
将弄清如何从 sys.argv
解析出那些参数。 argparse
模块还会自动生成帮助和使用手册「常见的-h」,并在用户给程序传入无效参数时报出错误信息。
第一步:创建一个 ArgumentParser
对象:
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser
对象包含将命令行解析成 Python 数据类型所需的全部信息。
备注:想知道具体信息可点击类,查看其中的源码
ArgumentParser 对象添加参数的方法为:add_argument()
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
调用 parse_args() 将返回一个具有integers和 accumulate 属性的对象,integers 属性将是一个包含一个或多个整数的列表。而accumulate属性,当传递的参数为–sum时,则是求和「sum() 函数」,当不传参时,默认求最大值「max()函数」
ArgumentParser 对象通过 parse_args() 方法解析参数,它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。
parser.parse_args([’–sum’, ‘7’, ‘-1’, ‘42’])
返回为:Namespace(accumulate=, integers=[7, -1, 42])
1、导入模块
import argparse
2、创建对象
parser = argparse.ArgumentParser(description='描述', usage = "传参提示")
3、添加对象属性
parser.add_argument()
4、解析参数
parser.parse_args() 或者 parser.parse_known_args()
下面的内容会讲到这两者的区别
至于具体的参数怎么使用,建议参考官网
,本人还未参透所有参数,(。・_・。)ノI’m sorry~,不过已够工作使用,待日后慢慢补充。
先上代码,下面有具体的代码解析,研究透这些,就够日常基本使用了
import argparse
parser = argparse.ArgumentParser()
def arg_parser():
parser = argparse.ArgumentParser(
usage="usage: %(prog)s [参数名] [参数值]"
)
parser.add_argument(
"--welcome", help="是否展示欢迎词", action='store_true'
)
parser.add_argument(
"--login", help="是否登录", action='store_true', default=True
)
parser.add_argument(
"--login_token", help="登录参数", default=None, type=str
)
model_name = parser.add_argument_group("Model", "使用什么模型处理数据?")
model_name.add_argument(
"--knn", help="使用KNN方法",
type=str, default=None
)
model_name.add_argument(
"--tree", help="使用决策树方法",
type=str, default=None
)
return parser
def argument_parser() -> argparse.ArgumentParser:
"""
Construct an return an `argparse.ArgumentParser` instance
"""
return arg_parser()
if __name__ == '__main__':
parser = argument_parser()
options, argv_rest = parser.parse_known_args()
if options.knn is not None:
argv_rest = ["-knn", options.knn] + argv_rest
if options.login_token is not None:
print('login_token参数为:', options.login_token)
options = options
arguments = argv_rest
print('options为:', options, '\n', "arguments为:", arguments)
第7行:定义parser,参数中的usage是介绍使用参数的格式,用于用户在运行 -h 时展示提示信息。如下图所示:
第10、14行:给parser添加属性,重点介绍 action 这个参数
相同点:
第10行和第14行均是action = ‘store_true’,此参数用于布尔类型的参数
区别:
第10行中,当命令行中触发welcome参数时,返回为True,没有触发的时候返回False。
第14行中,当命令行中触发login参数时,返回为True,没有触发的时候取默认值返回仍为True。也就是说,传不传login参数,返回的都是True,这就是default参数的作用。
action其他参数请参考: https://blog.csdn.net/tsinghuahui/article/details/89279152
第16行:
新增login_token参数,传入登录参数token,限制token类型为str,默认为None
提醒一句,这个type不要和action结合使用,action返回的只有布尔类型,注意参数名字大小写是不同的。
第20行:
add_argument_group(title=None, description=None)方法:
官方解释:
add_argument_group() 方法返回一个具有 add_argument() 方法的参数分组对象,这与常规的ArgumentParser一样。当一个参数被加入分组时,解析器会将它视为一个正常的参数,但是会在不同的帮助消息分组中显示该参数。
add_argument_group()方法接受 title 和 description 参数,它们可被用来定制显示内容
第41行:
parser.parse_known_args() 和 parser.parse_args() 的区别
options用来接收命令行中已定义了参数的信息
argv_rest 接收在命令中未被定义的信息
作用:有时一个脚本可能只解析部分命令行参数,而将其余的参数继续传递给另一个脚本或程序,它的作用方式很类似 parse_args() 但区别在于当存在额外参数时它不会产生错误,额外的参数被argv_rest给接收了。
使用:好比在PyQt中,像定义style这种,就可将参数赋给argv_rest,然后让系统「QApplication」去处理此参数
第42行:
假如当命令行中的参数中有knn这个参数,而这个参数我想交给系统去处理,所以我就把它添加到argv_rest之中,将这种参数,统一交给系统处理
第45行:
传入的参数中存在login_token,对login_token进行单独处理。