首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Argparse函数Python

Argparse函数Python
EN

Stack Overflow用户
提问于 2013-05-06 22:09:45
回答 2查看 459关注 0票数 0

如何使用下面的代码进行功能测试,在foo和bar上工作正常。

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-29 06:09:13

我得到的解决方案如下:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-05-06 22:25:06

test需要参数。您没有向main()调用传递任何参数,因此没有任何参数可以传递给__call__()

您可能想要向__init__()添加类似以下内容的内容

代码语言:javascript
复制
  parser.add_argument('arguments', nargs=argparse.REMAINDER)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16400563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档