如何将模块/方法名称作为命令行参数传递 python 2.7.10

2017年6月

我试图找到一种方法在命令行中添加方法名称作为参数。我在 python 2.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的新手。

保利

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

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

测试:

0001:~/mypy$ python stack45667979.py -h
usage: stack45667979.py [-h] [--method_name {foo,bar}]

add method name

optional arguments:
  -h, --help            show this help message and exit
  --method_name {foo,bar}
                        pass method name to be used
0001:~/mypy$ python stack45667979.py --method_name foo
foo
I am here.
0002:~/mypy$ python stack45667979.py --method_name baz
usage: stack45667979.py [-h] [--method_name {foo,bar}]
stack45667979.py: error: argument --method_name: invalid choice: 'baz' (choose from 'foo', 'bar')

之前的重复

从具有函数名称的字符串调用模块的函数

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过传递脚本名称作为参数从命令行运行不同的python脚本

python argh / argparse:如何将列表作为命令行参数传递?

如何将子类的函数名称作为参数传递给python中的父类方法?

如何将超过 10 个命令行参数传递给 jmeter 命令行运行?

Python:将1,2,3-7,8,9,10变成这样的字符串1,2,3,4,5,6,7,8,9,10

如何使用python将json字符串作为命令行参数传递

如何转换list1中的list = [1,2,[3,4],[5,6],7,[8,9,10]] = [1,2,3,4,5,6,7,8 ,9,10]在python中?

如何将多个函数名称解析为 python 命令行参数?

如何在python中将变量和方法作为命令行参数传递

如何将命令行参数传递给在docker中运行的python脚本

如何将参数从命令行传递到 python 中的主函数

如何将MongoDB集合名称作为参数传递给数据库连接函数-Python

如何将BeautifulSoup导入python方法OpenERP 7模块

将文件x中指定的函数作为命令行参数传递给python中的文件y的最佳方法

如果将目录路径作为命令行参数传递给python,则执行哪个python脚本?

python如何将配置解析器中的部分名称作为变量传递

在python中将文件路径作为命令行参数传递

将列表作为命令行参数传递给Python脚本

将目录作为命令行参数传递给 python 脚本

如何重复序列:r中的1,2,3,4,5,6,1,2,3,4,5,6,7,8,9,10,7,8,9,10

如何在Python中将整个列表作为命令行参数传递?

如何在Python中将“开始日期”和“结束日期”作为命令行参数传递

如何使用C#在Python中将字符串作为命令行参数传递

为什么索引2、3、6、7、10、11的“ fifoBuffer”值未在teapotPacket []数组中传递?

将命令行参数传递给Python

将命令行参数传递给python脚本

将命令行参数传递给python-behave

计算成对和的乘积mod 10 ^ 9 + 7的替代方法比O(N ^ 2)更快

如何指示 PowerShell 7 在 Windows 10 上的 WSL2 中运行 bash (Ubuntu) 脚本?