使用argparse模块添加命令行参数
有时,我们希望我们的程序运行时能够通过参数来控制其行为,一种就是通过一个前端交互的界面让用户来配置参数,另一种就是直接通过命令行的方式启动程序的同时设置参数。
最最原始的方法就是使用sys.argv来访问命令行里所有参数,但这比较麻烦,且参数的个数以及内容都需要在程序中自己写处理和校验逻辑。
sys.argv: python可以通过此函数来收集命令行中所有参数
# main.py
import sys
print(sys.argv)
命令行里运行如下代码:
F:\RolandWork\PythonProjects\studyPython>python main.py abcde 12345 "sdkl" "6667" -l -y -z
['main.py', 'abcde', '12345', 'sdkl', '6667', '-l', '-y', '-z']
从输出结果可以看到,脚本文件本身及后面的所有参数,都被以字符串形式存储在sys.argv中,形成一个列表。
argparse模块提供了更方便的功能。
argparse模块实现了命令行参数的功能,参数名如果是 --parm 或 -p 这种加了 - 或 -- 前缀的,默认为可选参数,但也可以指定其为必填参数。 不带前缀的,就是位置参数,也是必填参数。使用了这些参数后,无论是在开发环境运行,即python main.py --parm, 或是将程序打包后再运行,即 main.exe --parm 都是生效的。
简单用法如下:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("step", help="1: 执行金额及客户匹配, 2: 执行与发票的一对多金额匹配", choices=['1','2'])
args = parser.parse_args()
if args.step == '1':
print('开始执行step 1')
else:
print('开始执行step 2')
argparse模块提供了很多控制参数的属性及方法,具体的参见官方文档。
parse_args方法: 是解析命令行里参数用的,在测试阶段我们可以传递一个字符串列表,以测试其对我们设置的参数的解析结果。
import argparse
argp = argparse.ArgumentParser()
argp.add_argument("-f", "--foo") # 缩写和全称
argp.add_argument("--bar") # 仅全称
argp.add_argument("pos") # 位置参数
argp.add_argument('-t', action='store_true') # 仅缩写,并且做为flag
argp.add_argument('-r', required=True) # 正常情况下,可选参数是不必填的,但也可以设置为必填。
# parse_args默认解析sys.args里的参数,但是当我们传给一个字符串列表时,它就解析这个列表。 我们通常这样做是为了测试我们的参数
args = argp.parse_args(["--bar", "BAR", '-t', "-f","12345", "-r", "required arguments", 'xixihaha'])
print(args)
输出结果:
Namespace(foo='12345', bar='BAR', pos='xixihaha', t=True, r='required arguments')

浙公网安备 33010602011771号