您的位置:首页 > 运维架构

Python模块整理(七):选项模块Optparse

2012-03-18 21:58 295 查看
对于一般的程序参数可使用sys.argv,对于复杂的程序参数可以使用optparse

一、简单演示

实例1

#!/usr/bin/env python

import optparse

def main():

p=optparse.OptionParser()

p.add_option('--sysadmin','-s',default='diege')

options,arguments=p.parse_args() #options和赋值给选项的值构成选项字典的key和value,注value和arguments没有关系

print 'Hello,%s' % options

print 'Hello,%s' % options.sysadmin #options.sysadmin 获取到选项对应的参数值

if __name__=='__main__':

main()

#python optparse-example1.py

Hello,{'sysadmin': 'diege'}

Hello,diege

# python optparse-example1.py -s lily

Hello,{'sysadmin': 'lily'} #{选项: 选项的参数【不是程序的参数】}

Hello,lily

二、optparse使用模式

1、非选项使用模式

非选项模式就是没有设置选项options,只有参数arguments

#optparse-example2.py

import os,optparse

def main():

p=optparse.OptionParser(description="Python 'ls' command clone",prog="pyls",version="0.1a",usage="%prog [directory]")

options,arguments=p.parse_args()

if len(arguments)==1:

path=arguments[0]

#print options #options 打印出来是一个空的字典 {} 在options,arguments前没有使用p.add_option

#print arguments #arguments打印出来是一个列表['/usr/local/'] 是传给程序的参数

for filename in os.listdir(path):

print filename

else:

p.print_help() #如果参数少于1或多于1个,调用内建的help信息,介绍如果使用工具

if __name__=="__main__":

main()

# python optparse-example2.py

Usage: pyls [directory]

Python 'ls' command clone

Options:

--version show program's version number and exit

-h, --help show this help message and exit

2、True/False使用模式

p.add_option里的关键参数default=False和action='store_true'

在程序中使用一个选项来设置True/False,经典示例设置"--quit"选项(该参数关闭所有标准输出),和"--verbose"选项(将触发额外输出)

Optparse_example3.py

import optparse,os

def main():

p=optparse.OptionParser(description="Python 'ls' command clone",prog="pyls",version="0.1a",usage="%prog [directory]")

p.add_option("--verbose",'-v',action='store_true',help="Enables Verbose Output",default=False)

p.add_option("--quiet","-q",action='store_true',help="Enables Quiet Output",default=False)

#default=False 默认不启用这个模式,要使用这个模式的给-v/-q,如果设置default=True则默认启用这个模式

#如果两个选项都使用default=True,则在if判断里第一个模式使用。而不是p.add_option的顺序,推荐默认都使用default=False

options,arguments=p.parse_args()

if len(arguments)==1:

print options

if options.verbose:

print "Verbose Mode Enabled"

path=arguments[0]

for filename in os.listdir(path):

if options.verbose:

print "Filename:%s" % filename

elif options.quiet:

pass #这里可以定义安静输出到LOG等操作

else:

print filename

else:

p.print_help()

if __name__=="__main__":

main()

# python Optparse_example3.py

Usage: pyls [directory]

Python 'ls' command clone

Options:

--version show program's version number and exit

-h, --help show this help message and exit

-v, --verbose Enables Verbose Output

-q, --quiet Enables Quiet Output

# python Optparse_example3.py /tmp/

{'verbose': False, 'quiet': False}

# python Optparse_example3.py /tmp/ -v

{'verbose': True, 'quiet': False}

3、记数选项模式

p.add_option里的关键参数action="count",dest="verbose"

如果tcpdump中的-vvv,ps的-ww等

Optparse_example4.py

import optparse,os

def main():

p=optparse.OptionParser(description="Python 'ls' command clone",prog="pyls",version="0.1a",usage="%prog [directory]")

#p.add_option('-v',action="count",dest="verbose") #这里的dest对应options里的key options.verbose调用值

#dest="verbose"和'--verbose'一样,使用dest="verbose"也没有长选项--verbose.可以使用('--verbose','-v',action="count")

p.add_option('--verbose','-v',action="count",help="Enables Verbose Output") #加一个帮助

options,arguments=p.parse_args()

if len(arguments)==1:

#print options

#print arguments

if options.verbose:

print "Verbose Mode Enabled at Level:%s" % options.verbose

path=arguments[0]

for filename in os.listdir(path):

if options.verbose==1:

print "Filename:%s" % filename

elif options.verbose==2:

fullpath=os.path.join(path,filename)

print "Filename:%s |Byte Size:%s" % (filename,os.path.getsize(fullpath))

else:

print filename

else:

p.print_help()

if __name__=="__main__":

main()

# python Optparse_example4.py /tmp/

{'verbose': None}

# python Optparse_example4.py /tmp/ -v

{'verbose': 1}

# python Optparse_example4.py /tmp/ -vv

{'verbose': 2}

4、选择使用模式

p.add_option里的关键参数action="store",type="choice",dest="chatty",choices=["normal","verbose","quiet"],default="normal"

import optparse,os

def main():

p=optparse.OptionParser(description="Python 'ls' command clone",prog="pyls",version="0.1a",usage="%prog [directory]")

p.add_option('--chatty','-c',action="store",type="choice",dest="chatty",choices=["normal","verbose","quiet"],default="normal")

options,arguments=p.parse_args()

print options

if len(arguments)==1:

if options.chatty=="verbose":

print "Verbose Mode Enabled"

path=arguments[0]

for filename in os.listdir(path):

if options.chatty=="verbose":

print "Filename:%s" % filename

elif options.chatty=="quiet":

pass

else:

print filename

else:

p.print_help()

if __name__=="__main__":

main()

ofreebsd# python Optparse_example5.py

{'chatty': 'normal'}

Usage: pyls [directory]

Python 'ls' command clone

Options:

--version show program's version number and exit

-h, --help show this help message and exit

-c CHATTY, --chatty=CHATTY

ofreebsd# python Optparse_example5.py -c /tmp/

Usage: pyls [directory]

pyls: error: option -c: invalid choice: '/tmp/' (choose from 'normal', 'verbose', 'quiet')

# python Optparse_example5.py -c verbose /tmp/

{'chatty': 'verbose'}

Verbose Mode Enabled

# python Optparse_example5.py -c quiet /tmp/

{'chatty': 'quiet'}

也可以使用长格式

# python Optparse_example5.py --chatty=verbose /tmp

{'chatty': 'verbose'}

Verbose Mode Enabled

Filename:.snap

Filename:.X11-unix

5、具有多参数的选项使用模式

默认情况下身optparse选项只能有一个参数。但是可以指定参数的个数也是可以的。实例让ls同时输出三个目录的内容.

p.add_option里的关键参数action="store",nargs=3

Optparse_example6.py

import optparse,os

def main():

p=optparse.OptionParser(description="Python 'ls' command clone",prog="pyls",version="0.1a",usage="%prog [--dir dir1 dir2 dir3]")

p.add_option('--dir','-d',action="store",dest="dir",nargs=3,help="Show more than one dir")#dest和help都是可选的

options,arguments=p.parse_args()

if options.dir:

print options

for dir in options.dir:

print "Listing of %s:\n" % dir

for filename in os.listdir(dir):

print filename

else:

p.print_help()

if __name__=="__main__":

main()

# python Optparse_example6.py -d /tmp /root/

Usage: pyls [--dir dir1 dir2 dir3]

pyls: error: -d option requires 3 arguments

# python Optparse_example6.py -d /tmp /root/ /data/

{'dir': ('/tmp', '/root/', '/data/')}

我们发现在options字典里,传递dir选项的三个参数是一个元组。

注意:这里的三个参数,不是说可以选择输入1,2或者3个参数,而是必须输入三个。如果可以自由选择输入1,2或3个参数那不是很爽?

本文出自 “diege” 博客,请务必保留此出处http://ipseek.blog.51cto.com/1041109/809906
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: