如何将模块/方法名作为命令行参数传递Python2.7.10

2024-04-25 21:29:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在命令行中添加方法名作为参数。我使用的是python2.7.10中的argparse模块。在

def create_parser():
    parser = argparse.ArgumentParser(description='add method name')
    parser.add_argument('--method_name', help='pass method name to be used')
return parser

def foo():
    return "I am here."

def bar():
    return "I am not here."

def where_are_you(method_name):
    return method_name()

def main():
    return where_are_you(args.method_name)

if __name__ == '__main__':
    main()

我试图通过命令行调用其中一个方法,但得到以下错误: “TypeError:'str'对象不可调用。”请指导我这里我是python新手。在


Tags: 方法命令行nameyouaddparserreturnhere
1条回答
网友
1楼 · 发布于 2024-04-25 21:29:51

我添加了一个字典,它可以从名称映射到函数对象。这个字典还可以用来限制解析器接受的选择。在

import argparse
def create_parser():
    parser = argparse.ArgumentParser(description='add method name')
    parser.add_argument(' method_name', help='pass method name to be used', 
          choices=adict)
    return parser

def foo():
    return "I am here."

def bar():
    return "I am not here."

adict = {'foo': foo, 'bar': bar}  # map names to functions

def where_are_you(method_name):
    fn = adict[method_name]
    # could also use getattr
    return fn()

def main():
    args = create_parser().parse_args()     # get the string
    print(args.method_name)                 # debugging
    return where_are_you(args.method_name)

if __name__ == '__main__':
    print(main())          # show the return

测试:

^{pr2}$

上一个副本

Calling a function of a module from a string with the function's name

使用getattr对模块命名空间执行常规搜索,以将字符串与函数匹配。这可以在这里使用,但对于初学者来说可能太高级了,甚至对高级程序员来说也可能太开放了。一般来说,最好将给用户的选择限制在已知的有效选项集内。在

如果这个字典映射令人困惑,我建议使用更明显的映射

if args.method == 'foo':
    foo()
elif args.method == 'bar':
    bar()
else:
    parser.error('bad method choice')

相关问题 更多 >