Python optparser 和getopt

简介:

以下分为

1)python的命令行参数; 

2)使用getopt模块处理Unix模式的命令行选项; 

3)使用强大的optparser模块处理Unix模式的命令行选项

1). python的命令行参数:

python和C语言,shell脚本一样,可以接受命令行参数,并通过sys模块访问
e.g. python scripyname.py "hello" "world" 1 2 3

    import sys
    args = sys.argv[1:]
    filename = sys.argv[0]


sys.argv[0]是脚本的名字"scripyname.py",


sys.argv[1]是第一个参数,


sys.argv[1] == "hello", 

sys.argv[2] == "world" , 

sys.argv[3] == "1" ...

调用方式如下:
    python scriptname.py ${arg1} ${arg2} ${arg3}


2). 使用getopt模块处理Unix模式的命令行选项:


getopt模块用于抽出命令行选项和参数,也就是sys.argv


命令行选项使得程序的参数更加灵活。支持短选项模式和长选项模式。
e.g. python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b'


    import getopt
    shortargs = 'f:t'
    longargs = ['directory-prefix=', 'format', '--f_long=']


    opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )

getopt函数的格式是getopt.getopt ( [命令行参数列表], "短选项", [长选项列表] )


短选项名后的冒号(:)表示该选项必须有附加的参数。


长选项名后的等号(=)表示该选项必须有附加的参数。


返回opts和args。

opts是一个参数选项及其value的元组( ( '-f', 'hello'), ( '-t', '' ), ( '--format', '' ), ( '--directory-prefix', '/home' ) )


args是一个除去有用参数外其他的命令行输入 ( 'a', 'b' )


然后遍历opts便可以获取所有的命令行选项及其对应参数了。


    for opt, val in opts:
        if opt in ( '-f', '--f_long' ):
            pass
        if ....


使用字典接受命令行的输入,然后再传送字典,可以使得命令行参数的接口更加健壮。  






导入模块import getopt

使用语法:getopt.getopt(args, options[, long_options])

参数说明:options是单字符,long_options表示字符串

返回结果:是一个list,每个list的项为(选项,)的元组对

具体实例:#ping -c 12 -6 -s 1024 –help –size 1024

处理结果:

getopt.getopt(sys.argv[1:], ”c:s:6”, [“size=”,”help”])

[('-c', '12'), ('-6', ''), ('-s', '1024'), (“—help”,””), (“--size”,”1024”)]

c:表示是一个短选项,前面用’-‘表示,紧随着c之后的元素与c组成一个元组;

6:表示是一个短选项,前面用’-‘表示,与6组成元组的元素是空字符;

help:表示是一个长选项,前面用’--‘表示,与空字符组成一个元组;

size:表示是一个长选项,前面用’--‘表示,与1024组成一个元组;



两个来自python2.5 Documentation的例子:

>>> import getopt
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']


>>> optlist, args = getopt.getopt(args, 'abc:d:')

>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
>>> args
['a1', 'a2']

 

>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = s.split()
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', [
... 
    'condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x',
'')]
>>> args
['a1', 'a2']

python Documentation中也给出了getopt的典型使用方法:
import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError, err:
        # print help information and exit:
        print str(err) # will print something like "option -a not recognized"
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        elif o in ("-h", "--help"):
            usage()
            sys.exit()
        elif o in ("-o", "--output"):
            output = a
        else:
            assert False, "unhandled option"
    # ...

if __name__ == "__main__":
    main()

下面一段程序演示了在getopt下使用Usage()函数、参数字典(默认参数)、短选项、长选项等。

 

 

import os
import os.path
import sys
import getopt

def usage():
print '''
py price.py [option][value]...
-h or --help
-w or --wordattr-file="wordattr文件"
-s or --sflog-pricefile="sflog的价格变化文件"
-t or --tmpdir="临时文件的保存目录,默认为./"
-o or --outputfile="完整信息的保存文件,如果不指定,则输出到stdout"
-a or --wordattr-Complement="较新的wordattr去补全信息,缺省为Null,则丢失新广告的信息"
'''
return 0

if ( len( sys.argv ) == 1 ):
print '-h or --help for detail'
sys.exit(1)

shortargs = 'hw:s:t:o:a:'
longargs = ['help', 'wordattr=', 'sflog-pricefile=', 'tmpdir=', 'outputfile=', 'wordattr-Complement=']

opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs )

if args:
print '-h or --help for detail'
sys.exit(1)

paramdict = {'tmpdir':os.path.abspath(os.curdir), 'outputfile':sys.stdout, 'newwordattr':None }

for opt,val in opts:
if opt in ( '-h', '--help' ):
   usage()
   continue
if opt in ( '-w', '--wordattr' ):
   paramdict['wordattr'] = val
   continue
if opt in ( '-s', '--sflog-pricefile' ):
   paramdict['pricefile'] = val
   continue
if opt in ( '-t', '--tmpdir' ):
   paramdict['tmpdir'] = val
   continue
if opt in ( '-o', '--outputfile' ):
   try:
    paramdict['outputfile'] = open(val,'w')
   except Exception,e:
    #ul_log.write(ul_log.fatal,'%s,%s,@line=%d,@file=%s' \
     #%(type(e),str(e),sys._getframe().f_lineno,sys._getframe().f_code.co_filename))
    sys.exit(1)
   continue
if opt in ( '-a', '--wordattr-Complement' ):
   paramdict['newwordattr'] = val
   continue

3). 使用optparser模块处理Unix模式的命令行选项:

optparser模块非常的强大,完全体现了python的“如此简单,如此强大”的特性。

import optparse

def getConfig(ini):
    import ConfigParser
    try:
        cfg = ConfigParser.ConfigParser()
        cfg.readfp(open(ini))
        print cfg.sections()
    except:
        pass

if __name__=='__main__':
    parser = optparse.OptionParser()

    parser.add_option(
        "-i",
        "--ini",
        dest="ini",
        default="config.ini",
        help="read config from INI file",
        metavar="INI"
        )
    parser.add_option(
        "-f",
        "--file",
        dest="filename",
        help="write report to FILE",
        metavar="FILE"
        )
    parser.add_option(
        "-q",
        "--quiet",
        dest="verbose",
        action="store_false",
        default=True,
        help="don't print status messages to stdout"
        )

    (options, args) = parser.parse_args()
    getConfig(options.ini)
    print args










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1547348,如需转载请自行联系原作者
目录
相关文章
|
Python
Python 命令行工具辅助getopt使用解析!
正式的Python专栏第14篇,同学站住,别错过这个从0开始的文章!
314 0
Python 命令行工具辅助getopt使用解析!
|
Shell 索引 Python
|
Python 存储 开发工具
Python optparser库详解
一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库。当然了,不敢说理解的很到位,但是足以应付正常的使用了。废话不多说,开始今天的分享吧。 简介 optparse模块主要用来为脚本传递命令参数功能. 引入 在IDE中引入optparser是很方便的。
916 0
|
9天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
2天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
12 5
|
2天前
|
人工智能 数据挖掘 开发者
探索Python编程:从基础到进阶
【10月更文挑战第32天】本文旨在通过浅显易懂的语言,带领读者从零开始学习Python编程。我们将一起探索Python的基础语法,了解如何编写简单的程序,并逐步深入到更复杂的编程概念。文章将通过实际的代码示例,帮助读者加深理解,并在结尾处提供练习题以巩固所学知识。无论你是编程新手还是希望提升编程技能的开发者,这篇文章都将为你的学习之旅提供宝贵的指导和启发。
|
7天前
|
数据处理 Python
从零到英雄:Python编程的奇幻旅程###
想象你正站在数字世界的门槛上,手中握着一把名为“Python”的魔法钥匙。别小看这把钥匙,它能开启无限可能的大门,引领你穿梭于现实与虚拟之间,创造属于自己的奇迹。本文将带你踏上一场从零基础到编程英雄的奇妙之旅,通过生动有趣的比喻和实际案例,让你领略Python编程的魅力,激发内心深处对技术的渴望与热爱。 ###