美文网首页
使用getopt解析命令行参数

使用getopt解析命令行参数

作者: 不思九八 | 来源:发表于2019-12-13 21:57 被阅读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被当作它的参数。

相关文章

网友评论

      本文标题:使用getopt解析命令行参数

      本文链接:https://www.haomeiwen.com/subject/srpqnctx.html