python使用命令行运行脚本的时候,可使用getopt()函数进行解析各种参数,可解析sys.argv获取用户输入。
定义:getopt(args, shortopts, longopts=[ ]),
- args:固定写法sys.argv[1:]
- shortopts: 短选项
- 限制命令参数的key名称(命令参数可以不传,若传,必须按照指定名称,否则就噶了)
- 命令行参数必须使用-(单短横线)
- 命令行参数写法:1. -a (不带参数) 2.-a test_a(带参数,中间有空格,也可省略空格) 3. -a "test_a test_b test_c"(如果参数中有空格,需要使用引号)
- shortopts短参写法:'a:b:c:d' (如果带参数值必须加:,a,b,c可带参数值,d不能带参数值,否则报错)
- longopts:长选项
- 数组类型的字符串
- 命令行参数必须使用--(双短横线)
- --a: 不带参数值
- --a=test_aa : 带参数值
- --a="test_aa test_bb" : 参数带空格 (注意等号前后不能有空格)
返回值:getopt()函数有2个返回值,分别是opts 和 args, opts保存解析后的输入参数的元组,args保存的是除去解析后的部分,即不能被解析的参数元组。
import sys
from getopt import getopt
opts, agrs = getopt(sys.argv[1:], 'a:bc:d', ['xx=', 'ff=','ww'])
print(f'opts:{opts}')
print(f'agrs:{agrs}')
命令行运行:
python3 get_opt_test.py -a atest_b -bc "test_参数空格1 test_参数空格" -d --xx=我是xx --f=我是ff --ww 我是多余的
打印运行结果:
opts:[('-a', 'atest_b'), ('-b', ''), ('-c', 'test_参数空格1 test_参数空格'), ('-d', ''), ('--xx', '我是xx'), ('--ff', '我是ff'), ('--ww', '')]
agrs:['我是多余的']
说明:
1. 参数-a atest_b(-a=atest_b)-> 获取atest_b
2. -bc "test_参数空格1 test_参数空格" -> 按照顺序,-b解析到value为空,-c解析到value为"test_参数空格1 test_参数空格"
3.-d 没有value,所以value为空,注意:由于d没有参数,所以在定义的时候,不能有:(冒号),否则就会被识别必须传参
4.--xx 和--ff 为长参数选项,必须带参数,注意:传参不能有空格,否则解析不对