使用getopt解析命令行参数
2019-12-13 本文已影响0人
不思九八
概述
getopt模块用于解析命令行参数,也就是刚运行时存储在sys.argv中的数据。
使用getopt可以方便地解析出命令行中的选项和变量,选项支持两种型式:短选项(例如-a)和长选项(例如--help)。
getopt模块提供两个函数getopt()
和 gnu_getopt
, 一个异常GetoptError
。两个函数不同之处在于:getopt()
遇到第一个无选项变量后就不再解析选项,认为其后的所有数据都是变量;gnu_getopt
允许无选项变量和有选项变量混合,在解析之前,gnu_getopt
会对输入的命令行重新排序,然后按照getopt()
方式解析。
解析命令行时一般不包括运行程序本身,所以解析的对象应该是sys.argv[1:]
使用getopt.getopt()
解析命令行
opts, args = getopt.getopt(argv, "a:p:", ["addr=", "port="])
for opt, arg in opts:
print(opt, '=>', arg)
for arg in args:
print(arg)
输入:myscript -a 127.0.0.1 -p 8080 runserver
输出:
-a => 192.168.1.120
-p => 8080
runnserver
输入:myscript --addr 127.0.0.1 --p 8080 runserver
输出:
--addr => 127.0.0.1
--port => 8080
runserver
输入:myscript --addr 127.0.0.1 mixed --port 8080 runserver
输出:
--addr => 127.0.0.1
mixed
--port
8080
runserver
在这个例子中,mixed被插入到--port之前,发现--port不再被当作一个选项处理,而是当作一般变量处理,和8080一起被解析到args列表中。
使用getopt.gnu_getopt()
解析命令行
opts, args = getopt.getopt(argv, "a:p:", ["addr=", "port="])
for opt, arg in opts:
print(opt, '=>', arg)
for arg in args:
print(arg)
输入:myscript --addr 127.0.0.1 mixed --port 8080 runserver
输出:
--addr => 127.0.0.1
--port => 8080
mixed
runserver
与getopt.getopt()
不同,--port仍然被当作选项,8080被当作它的参数。