Python Argparse函数

Python Argparse函数,python,argparse,Python,Argparse,下面的代码如何能够在foo和bar上正确地进行功能测试 import argparse class Myclass(object): def foo(self): print 'foo' def bar(self): print 'bar' def test(self,name,place): print name, place class Main(Myclass): def __init__(self

下面的代码如何能够在foo和bar上正确地进行功能测试

import argparse

class Myclass(object):

    def foo(self):
        print 'foo'

    def bar(self):
        print 'bar'

    def test(self,name,place):
        print name, place


class Main(Myclass):
    def __init__(self):
        foo_parser = argparse.ArgumentParser()
        foo_parser.add_argument('method')
        self.args = foo_parser.parse_args()

    def __call__(self, *args, **kws):
        method = self.args.method
        return getattr(self, method)(*args, **kws)


if __name__ == "__main__":
    main = Main()

    main()

test
需要参数。您没有传入任何调用
main()
,因此没有要传入的调用
\uuuuuu call\uuuuuu()

您可能想在
\uuuu init\uuuu()
中添加类似的内容:


然后将
main.args.arguments
传递回动态调用。

我得到的解决方案如下:

def __init__(self):
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    for name in dir(self):
        if not name.startswith("_"):
            p = subparsers.add_parser(name)
            method = getattr(self, name)
            argnames = inspect.getargspec(method).args[1:]
            for argname in argnames:
                p.add_argument(argname)
            p.set_defaults(func=method, argnames=argnames)
    self.args = parser.parse_args()

def __call__(self):
    a = self.args
    callargs = [getattr(a, name) for name in a.argnames]
    return self.args.func(*callargs)
def __init__(self):
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()

    for name in dir(self):
        if not name.startswith("_"):
            p = subparsers.add_parser(name)
            method = getattr(self, name)
            argnames = inspect.getargspec(method).args[1:]
            for argname in argnames:
                p.add_argument(argname)
            p.set_defaults(func=method, argnames=argnames)
    self.args = parser.parse_args()

def __call__(self):
    a = self.args
    callargs = [getattr(a, name) for name in a.argnames]
    return self.args.func(*callargs)