Python参数提供的限制功能较少

Python参数提供的限制功能较少,python,command-line-arguments,optparse,Python,Command Line Arguments,Optparse,是否有一种干净的方法可以使optpass绕过/处理一个通用的-XXX选项 我的案例是一个应用程序,我想为它提供一个lesslike选项,将应用程序的输出条目限制在- e、 g 我想我可以覆盖sys.argvdict以避免optparse引发错误并手动解析/删除自定义参数,但我想知道optparse lib是否预见到这种情况并提供了更好的方法。在argparse中,可以定义一个可选的位置整数参数。负值在用户看来就像给出了一个选项: import argparse parser = argparse

是否有一种干净的方法可以使
optpass
绕过/处理一个通用的
-XXX
选项

我的案例是一个应用程序,我想为它提供一个
less
like选项,将应用程序的输出条目限制在
-

e、 g


我想我可以覆盖
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_参数
,例如使用
“-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…

我建议改为看一下
argparse
。+1表示
argparse
,这样做很容易。在
optparse
中执行此操作需要创建一个自定义
选项
类和一个自定义
选项解析器
类。即使如此,要将选项集群与这些“裸”选项区分开来还是很困难的(例如,
myapp.py list-10
是否意味着
myapp.py list-1-0
(optparse的默认值)或
-10
?感谢您的评论,我如何使用argparse实现它呢?真是令人讨厌:),加上它的有限性,因为在我的例子中,我希望数字是1到无穷大,数字可以是无穷大(但不包括无穷大)。您只需要1-9的选项,其余数字取自option参数。
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"]))