知道是否有一种干净的方法可以使optparse
绕过/处理通用-XXX
选项吗?
我的案例是一个应用程序,我想为其提供一个less
类似的选项,以将应用程序的输出条目限制为之后定义的数字-
例如
myapp.py list -10
我想我可以覆盖sys.argv
dict 以避免optparse
引发错误并手动解析/删除自定义参数,但我想知道这是否是 optparse lib 预见并提供更好方法的情况。
知道是否有一种干净的方法可以使optparse
绕过/处理通用-XXX
选项吗?
我的案例是一个应用程序,我想为其提供一个less
类似的选项,以将应用程序的输出条目限制为之后定义的数字-
例如
myapp.py list -10
我想我可以覆盖sys.argv
dict 以避免optparse
引发错误并手动解析/删除自定义参数,但我想知道这是否是 optparse lib 预见并提供更好方法的情况。
在 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...