【发布时间】:2010-10-26 18:26:22
【问题描述】:
我正在使用 python 版本 2.4.3 开发 cli。我想要输入异常检查。以下是部分代码。有了这段代码,我可以输入
addcd -t 11
如果我输入
addcd -t str_not_int
或
addcd -s 3
我会发现错误类型参数和错误选项的错误。然而,这还不够。例如
addcd s 11
或
addcd s a
那么 optparse 无法检测到这种错误输入。
消除这种情况 “addcd s a 11 21”,我通过检查参数的数量来添加一些东西,但我不知道它是否是正确的方法。
那么,如何为 CLI 实施彻底/高效的输入检查?
class OptionParsingError(RuntimeError):
def __init__(self, msg):
self.msg = msg
class OptionParsingExit(Exception):
def __init__(self, status, msg):
self.msg = msg
self.status = status
class ModifiedOptionParser(optparse.OptionParser):
def error(self, msg):
raise OptionParsingError(msg)
def exit(self, status=0, msg=None):
raise OptionParsingExit(status, msg)
class CDContainerCLI(cmd.Cmd):
"""Simple CLI """
def __init__(self):
""" initialization """
cmd.Cmd.__init__(self)
self.cdcontainer=None
def addcd(self, s):
args=s.split()
try:
parser = ModifiedOptionParser()
parser.add_option("-t", "--track", dest="track_number", type="int",
help="track number")
(options, positional_args) = parser.parse_args(args)
except OptionParsingError, e:
print 'There was a parsing error: %s' % e.msg
return
except OptionParsingExit, e:
print 'The option parser exited with message %s and result code %s' % (e.msg, e.status)
return
if len(args) != 4:
print "wrong number of inputs"
return
cd_obj= CD()
cd_obj.addCD(options.track_number, options.cd_name)
【问题讨论】:
-
如果你想允许多个参数,使用
nargs='*' -
注意 optparse 是deprecated since 2.7,如果可以的话,看看
argparse。
标签: python command-line-arguments