2013-05-06 96 views
0

下面的代码如何用于函数测试,在foo和bar上工作是否正常工作。Argparse函数Python

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() 

回答

0

我得到的解决方案是如下:

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) 
0

test需要参数。您还没有传递任何的号召,main(),所以有没有在__call__()

传给你可能想这样的事情添加到__init__()

再通main.args.arguments回动态呼叫。