Python - 将argparse变量传递给类

时间:2015-04-21 13:59:05

标签: python

使用Python 2.6,我想将args传递给类,但是我收到以下错误。

Traceback (most recent call last):
File "./myscript.py", line 95, in <module>
args = get_parser().parse_args()
File "./myscript.py", line 22, in get_parser
generate_mutex.set_defaults(func=ns_calls.generate_lbvs_bindings)
NameError: global name 'ns_calls' is not defined

主要剧本:

# myscript.py
from myclassfile import *

def get_parser():
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(dest="subparser_name")

    generate = subparsers.add_parser('generate')
    generate_mutex = generate.add_mutually_exclusive_group(required=True)
    generate_mutex.add_argument('-g', '--servicegroupname', help='The servicegroup name.',metavar='<servicegroup name>')
    generate_mutex.add_argument('-l', '--lbvservername', help='The virtual erver name to which the service is bound.',metavar='<lbvserver name>')
    generate_mutex.set_defaults(func=ns_calls.generate_lbvs_bindings)

if __name__ == "__main__":
    args = get_parser().parse_args()
    args.func(args)
    ns_calls = NetscalerCalls(args)

我的模块文件:

# myclassfile.py

class NetscalerCalls(object):
    def __init__(self, args):
        self.lbvservername = args.lbvservername
        self.servername = args.servername

2 个答案:

答案 0 :(得分:3)

你没有把args放在这里:

ns_calls = NetscalerCalls()
                          ^

根据您创建的课程,这是无效的,其中__init__需要(self, args)

当您启动课程时,它会自动传入self。所以你需要在启动课时传入args。

例如

# myscript.py
from myclassfile import *

...
...

if __name__ == "__main__":
    args = get_parser().parse_args()
    args.func(args)
    ns_calls = NetscalerCalls(args)

如果您在声明之前尝试传入args,则会失败

这就是为什么我已将ns_calls的变量声明放在args的声明下面

答案 1 :(得分:1)

您的 init 要求您传递一个args参数,但是当您执行第ns_calls = NetscalerCalls()行时,您没有传递该参数,因此它会抱怨。获得所需的args对象后,您必须执行该行ns_calls = NetscalerCalls( args )