ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 理解OptionParser

2019-10-07 17:56:48  阅读:430  来源: 互联网

标签:optparse python optionparser


我正在尝试optparse,这是我的初始脚本.

#!/usr/bin/env python

import os, sys
from optparse import OptionParser

parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-d", "--dir", type="string",
                  help="List of directory",
                  dest="inDir", default=".")

parser.add_option("-m", "--month", type="int",
                  help="Numeric value of the month", 
                  dest="mon")

options, arguments = parser.parse_args()

if options.inDir:
    print os.listdir(options.inDir)

if options.mon:
    print options.mon

def no_opt()
    print "No option has been given!!"

现在,这就是我要做的事情:

>如果选项没有给出参数,则它将采用“默认”值.
即myScript.py -d将只列出当前目录或-m而不带任何参数将当前月份作为参数.
>对于“–month”,只允许01到12作为参数
>想要结合多个选项来执行不同的任务,例如myScript.py -d this_dir -m 02将做与-d和-m不同的事情.
>它将打印“没有选择!”仅在脚本未提供选项的情况下.

这些可行吗?我确实访问了doc.python.org网站以获得可能的答案,但作为一个Python初学者,我发现自己迷失在页面中.非常感谢你的帮助;提前致谢.干杯!!

更新:16/01/11

我想我还在遗漏一些东西.这就是我脚本中的内容.

parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-m", "--month", type="string",
                  help="select month from  01|02|...|12",
                  dest="mon", default=strftime("%m"))

parser.add_option("-v", "--vo", type="string",
                  help="select one of the supported VOs",
                  dest="vos")

options, arguments = parser.parse_args()

这些是我的目标:

>运行脚本没有任何选项,将返回option.mon [working]
>使用-m选项运行脚本,返回option.mon [working]
>使用ONLY -v选项运行脚本,只返回option.vos [根本不工作]
>使用-m和-v选择运行脚本,将执行不同的操作[尚未达到目的]

当我使用-m选项运行脚本时,它首先打印option.mon,然后打印option.vos,我根本不需要它.真的很感激,如果有人能把我放在正确的方向.干杯!!

第三次更新

    #!/bin/env python

    from time import strftime
    from calendar import month_abbr
    from optparse import OptionParser

    # Set the CL options 
    parser = OptionParser()
    usage = "usage: %prog [options] arg1 arg2"

    parser.add_option("-m", "--month", type="string",
                      help="select month from  01|02|...|12", 
              dest="mon", default=strftime("%m"))

    parser.add_option("-u", "--user", type="string",
                      help="name of the user", 
              dest="vos")

    options, arguments = parser.parse_args()

    abbrMonth = tuple(month_abbr)[int(options.mon)]

    if options.mon:
        print "The month is: %s" % abbrMonth 

    if options.vos:
        print "My name is: %s" % options.vos 

    if options.mon and options.vos:
        print "I'm '%s' and this month is '%s'" % (options.vos,abbrMonth)

这是脚本在使用各种选项运行时返回的内容:

# ./test.py
The month is: Feb
#
# ./test.py -m 12
The month is: Dec
#
# ./test.py -m 3 -u Mac
The month is: Mar
My name is: Mac
I'm 'Mac' and this month is 'Mar'
#
# ./test.py -u Mac
The month is: Feb
My name is: Mac
I'm 'Mac' and this month is 'Feb'

我只想看到:

 1. `I'm 'Mac' and this month is 'Mar'` - as *result #3*  
 2. `My name is: Mac` - as *result #4*

我究竟做错了什么?干杯!!

第四次更新:

回答自己:这样我可以得到我正在寻找的东西,但我仍然没有留下深刻的印象.

#!/bin/env python

import os, sys
from time import strftime
from calendar import month_abbr
from optparse import OptionParser

def abbrMonth(m):
    mn = tuple(month_abbr)[int(m)]
    return mn

# Set the CL options 
parser = OptionParser()
usage = "usage: %prog [options] arg1 arg2"

parser.add_option("-m", "--month", type="string",
                  help="select month from  01|02|...|12",
                  dest="mon")

parser.add_option("-u", "--user", type="string",
                  help="name of the user",
                  dest="vos")

(options, args) = parser.parse_args()

if options.mon and options.vos:
    thisMonth = abbrMonth(options.mon)
    print "I'm '%s' and this month is '%s'" % (options.vos, thisMonth)
    sys.exit(0)

if not options.mon and not options.vos:
    options.mon = strftime("%m")

if options.mon:
    thisMonth = abbrMonth(options.mon)
    print "The month is: %s" % thisMonth

if options.vos:
    print "My name is: %s" % options.vos

现在这给了我正是我想要的东西:

# ./test.py 
The month is: Feb

# ./test.py -m 09
The month is: Sep

# ./test.py -u Mac
My name is: Mac

# ./test.py -m 3 -u Mac
I'm 'Mac' and this month is 'Mar'

这是唯一的方法吗?对我来说不是“最好的方式”.干杯!!

解决方法:

optparse已弃用;你应该在python2和python3中使用argparse

http://docs.python.org/library/argparse.html#module-argparse

标签:optparse,python,optionparser
来源: https://codeday.me/bug/20191007/1868344.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有