使用Python命令行参数作为函数名称和函数值

VIS*_*SQL 1 command-line-arguments python-2.7

与此问题相关的python 中的命令行参数。

使用 SYS 模块,如何在代码中使用命令行参数作为函数名称和函数值 - 而不导入其他模块?

我想要一个仅使用 sys 的解决方案。另外,请不要使用可变长度参数答案。这些令人困惑。假设在命令行中仅指定了函数名称和一个函数变量。

import sys

def reversal(aaa): return aaa[::-1]

a = sys.argv[1]
b = sys.argv[2]

print a(b)
Run Code Online (Sandbox Code Playgroud)

在命令行中

cpu_location$ python blah.py reversal 'abcdefg'

Traceback (most recent call last):
File "blah.py", line 8, in <module>
print a(b)
TypeError: 'str' object is not callable
Run Code Online (Sandbox Code Playgroud)

我想知道如何使 sys.argv[1] 被视为函数名,从而调用我定义的函数。

我在这方面看到的其他帖子是以下内容的混搭: - 处理 C/C++ 并添加一些其他模块 - 根本不使用 sys - 使用 argv 项作为函数的值和其他文件的名称,而不是功能

Cla*_*diu 6

eval解决方案更好的是:

a = globals()[sys.argv[1]]
a(b)
Run Code Online (Sandbox Code Playgroud)

globals()返回将全局变量名称映射到这些全局变量的字典。因此globals()['reversal']reversal函数求值。

它比eval函数更安全。按照你的方法,你可以做类似的事情:

python blah.py 'lambda x: x+"hi"' foobar
Run Code Online (Sandbox Code Playgroud)

这将打印foobarhi,这是意外的,因为这不是函数名称。