3

知道是否有一种干净的方法可以使optparse绕过/处理通用-XXX选项吗?

我的案例是一个应用程序,我想为其提供一个less类似的选项,以将应用程序的输出条目限制为之后定义的数字-

例如

myapp.py list -10

我想我可以覆盖sys.argvdict 以避免optparse引发错误并手动解析/删除自定义参数,但我想知道这是否是 optparse lib 预见并提供更好方法的情况。

4

1 回答 1

0

在 argparse 中,您可以定义一个可选的位置整数参数。然后,负值会给用户一个选项:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('limit', type=int, nargs='?')
args = parser.parse_args()
if args.limit is not None:
    print "Limiting to %d." % -args.limit

在这种情况下,默认的帮助文本是不合理的,但可以使用metavar关键字参数来调整add_argument,例如"-n"

我只能用 optparse 想出一个看起来很讨厌的方法来做到这一点。基本上为数字可以开头的每个数字定义一个单独的选项:

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-1")
parser.add_option("-2")
options,args = parser.parse_args()
if options.__dict__["1"] is not None:
    print "Your number was %d." % (int("1"+options.__dict__["1"]))
elif options.__dict__["2"] is not None:
    print "Your number was %d." % (int("2"+options.__dict__["2"]))

以此类推,直到 9 为止。还要考虑是否需要考虑 0...

于 2011-11-16T21:34:25.397 回答