这是一个非常棘手的问题…您可以很容易地使用argparse将操作“绑定”到命令行参数(例如,创建一个类,在以前创建的类上操作…)。这里有一个愚蠢的例子…(参数foo创建一个对象,参数栏修改foo创建的对象)。在from argparse import ArgumentParser,Action
class Foo(object):
def __init__(self,*args):
self.args=args
def __str__(self):
return str(self.args)
class FooAction(Action):
def __call__(self,parser,namespace,values,option_string=None):
setattr(namespace,self.dest,Foo(*values)) #Add Foo to the options...
class BarAction(Action):
def __call__(self,parser,namespace,values,option_string=None):
FooObj=getattr(namespace,'foo') #raises an error if foo isn't in namespace...
#In this way, BarAction is like a filter on the
#object created by foo.
FooObj.args=tuple(list(FooObj.args)+list(values)) #append to the list of args.
parser=ArgumentParser()
parser.add_argument(' foo',nargs='*',action=FooAction,help="Foo!")
parser.add_argument(' bar',nargs='*',action=BarAction,help="Bar! : Must be used after foo")
namespace=parser.parse_args(" foo Hello World bar Nice Day".split())
print (namespace)
print (namespace.foo)
但是,这与您的有点不同,因为使用argparse,-argument是不可能的,只有-a或{}。这对你来说可能已经是个破坏交易的因素了,我不确定。。。在
下一个困难是处理括号。。。[和{}。如果您可以将这些作为不同命令行选项的参数,那么您可能会没事……您可能可以设置第二个解析器来解析内部部分,但我以前从未尝试过类似的方法。。。(如果其他人对如何处理方括号有任何想法,我将非常感兴趣地听取他们的意见)。在
就optparse和{}而言,我非常确定您可以使用它们做任何事情,都可以使用argparse,这就是为什么我将它们排除在讨论之外。在