• python模块整理24Optparse选项参数


    对于一般的程序参数可使用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个参数那不是很爽?

  • 相关阅读:
    浙江大华2012笔试题+答案解析
    腾讯2011年10月15日校招笔试+答案解析
    百度2011招聘笔试题+答案解析
    阿里巴巴2011笔试题+答案解析
    微软2012实习生笔试题+答案解析
    腾讯2012实习生笔试题+答案解析
    迅雷2012春招+答案解析
    华为2012春上机笔试题+参考程序
    中兴2011笔试题+答案解析
    mysql修改数据库名
  • 原文地址:https://www.cnblogs.com/diege/p/2755354.html
Copyright © 2020-2023  润新知