Python Argparse函数
下面的代码如何能够在foo和bar上正确地进行功能测试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
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)