将命令行参数绑定到Python

时间:2016-08-21 11:16:27

标签: python-3.x argparse

我正在使用一些带有一些可能参数的命令行实用程序。参数解析是使用argparse模块完成的。最后,通过一些额外的自定义,我得到一个只有一个元素的字典:

{'add_account': ['example.com', 'example']}

其中键是一个应该转换为方法调用的选项,值是参数列表。 我已经实现了所有计划对象方法。 我想知道基于接收字典创建方法调用的最佳,最pythonic方法是什么。 我显然可以通过预定义的映射,如:

if option == 'add_account':
    object.add_account(
                       dictionary['add_account'][0],
                       dictionary['add_account'][1]
                       )

我觉得有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用getattr来获取方法对象(argparse.py多次使用此方法。)

你没有给我们一个具体的例子,但我猜你有这样一个类:

In [387]: class MyClass(object):
     ...:     def add_account(self,*args):
     ...:         print(args)
     ...:         
In [388]: obj=MyClass()
In [389]: obj.add_account(*['one','two'])
('one', 'two')

要做同样的事情,从字符串开始,我可以使用getattr来获取方法对象:

In [390]: getattr(obj,'add_account')
Out[390]: <bound method MyClass.add_account of <__main__.MyClass object at 0x98ddaf2c>>
In [391]: getattr(obj,'add_account')('one')
('one',)

现在用你的字典:

In [392]: dd={'add_account': ['example.com', 'example']}
In [393]: key='add_account'
In [394]: getattr(obj, key)(*dd[key])
('example.com', 'example')