我正在试用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将使用当前月份作为参数。myScript.py -d this_dir -m 02将做不同于单独的-d和-m的事情。这些可行吗?我确实访问了doc.python.org站点,寻找可能的答案,但作为一个蟒蛇初学者,我发现自己迷失在页面中。非常感谢你的帮助,谢谢。干杯!!
更新: 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工作option.mon工作option.vos当我只使用-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*我做错什么了?干杯!!
第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'这是唯一的方法吗?在我看来不是“最好的方法”。干杯!!
发布于 2011-06-02 23:29:11
不建议使用optparse;您应该在python2和python3中使用argparse。
http://docs.python.org/library/argparse.html#module-argparse
发布于 2014-05-11 00:32:58
你的解决方案在我看来是合理的。评论:
month_abbr变成元组;没有tuple(),它应该工作得很好raise OptionValueError)发布于 2015-08-13 13:35:56
只是为了说明选项--argparse.argumentParser的add_argument()-method:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from argparse import ArgumentParser
from datetime import date
parser = ArgumentParser()
parser.add_argument("-u", "--user", default="Max Power", help="Username")
parser.add_argument("-m", "--month", default="{:02d}".format(date.today().month),
choices=["01","02","03","04","05","06",
"07","08","09","10","11","12"],
help="Numeric value of the month")
try:
args = parser.parse_args()
except:
parser.error("Invalid Month.")
sys.exit(0)
print "The month is {} and the User is {}".format(args.month, args.user)https://stackoverflow.com/questions/4960880
复制相似问题