getopt两个模块getopt 和gun_getopt 的异同

Posted 吴增丁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getopt两个模块getopt 和gun_getopt 的异同相关的知识,希望对你有一定的参考价值。

getopt的两个模块getopt和gun_getopt都可以接收参数,但是又有不同;

先看 getopt.getopt这个模块:

import sys
import getopt
def main(param):
    opts, args = getopt.getopt(param,"hc:s:")
    print("opts",opts )
    print("args",args)
    for opt,arg in opts:
        if opt == "-h":
            print(\'help\')
        elif opt == "-c":
            chip = arg
        elif opt == \'-s\':
            seq = arg
    print(\'chip\',chip,\'seq\',seq)
if __name__==\'__main__\':
    main(sys.argv[1:])

在命令行运行并得到结果,从结果看到-c 和-s 都得到正确解析,如下图:

但是如果我们换一种输入参数,得到结果不能正确解析,如下图: 发现从5之后就没有解析,这些没有解析的参数放在args当中,导致seq 变量声明,最终报错。

而实际情况有这种需要,比如如下情况,可用getopt.gnu_getopt模块:

import sys
import getopt
def main(param):
    opts, args = getopt.gnu_getopt(param,"hc:s:")
    print(opts, args)
    if len(args)== 1:
        if args[0]=="Model1":
            for opt,arg in opts:
                if opt == "-h":
                    sys.exit(0)
                elif opt == "-c":
                    chip = arg
            print(\'Molde1\',\'chip\',chip)
        elif args[0]=="Model2":
            for opt,arg in opts:
                if opt == "-h":
                    sys.exit(0)
                elif opt == "-c":
                    chip = arg
                elif opt == "-s":
                    seq = arg
            print(\'Molde1\',\'chip\',chip,\'seq\',seq)
if __name__==\'__main__\':
    main(sys.argv[1:])

在命令行输入参数,所有参数得到正常解析。

 

总结:getopt.gnu_getopt有getopt.getopt的基本接受参数功能,但是对参数中有 [option] 选项的时候,需要用getopt.getopt解决。

 

以上是关于getopt两个模块getopt 和gun_getopt 的异同的主要内容,如果未能解决你的问题,请参考以下文章

python之getopt模块使用

Perl模块 Getopt::Long 解析

python之getopt

python getopt模块

基础入门_Python-模块和包.运维开发中内建模块getopt的最佳实践?

[记录]Shell中的getopts和getopt用法