假设您有一个定义了多个功能的程序。每个函数都在一个单独的for循环中调用。是否可以通过命令行指定应该调用哪个函数?
示例:
python prog.py -x <<<filname>>>
其中-x告诉python转到特定的for循环,然后执行for循环中调用的函数?
谢谢, Seafoid。
答案 0 :(得分:10)
主入口点的Python习语:
if __name__ == '__main__':
main()
将main()
替换为应首先执行的任何功能...
(更多关于if name ...
:http://effbot.org/pyfaq/tutor-what-is-if-name-main-for.htm)
如果要指定通过命令行参数运行的函数,只需手动或通过一些帮助程序检查这些参数,例如: http://docs.python.org/library/optparse.html,然后是所需功能的分支。
如果你不想要这样的东西:
if options.function_to_call == 'mydesiredfunction':
mydesiredfunction()
您可以利用getattr
。
最后,使用globals
的另一种“通用”方法(排除异常处理):
$ cat 1933407.py
#!/usr/bin/env python
# coding: utf-8
import sys
def first():
print '1 of 9'
def second():
print '2 of 9'
def seventh():
print '7 of 9'
if __name__ == '__main__':
globals()[sys.argv[1]]()
同时在命令行......
$ python 1933407.py second
2 of 9
答案 1 :(得分:8)
您需要sys
模块。
例如:
import sys
#Functions
def a(filename): pass
def b(filename): pass
def c(filename): pass
#Function chooser
func_arg = {"-a": a, "-b": b, "-c": c}
#Do it
if __name__ == "__main__":
func_arg[sys.argv[1]](sys.argv[2])
如果您运行a(filename)
python file.py -a filename
答案 2 :(得分:4)
如果您只是想在开发和类似情况下使用它来快速测试不同的功能,可以使用-c
命令行参数:
python -c 'import myfile; myfile.somefunc()'
答案 3 :(得分:1)
一种非常简单的方法如下:
import sys
x_is_set=False
for arg in sys.argv[1:]:
if arg == '-x': x_is_set=True
if x_is_set:
print "-x is set"
答案 4 :(得分:0)
是的,内置函数'exec()'和'eval()'是你的朋友。只需在函数名称中添加'()'即可。但是,您应该想知道这是否是解决实际问题的最佳方案。技术上可行的事实并不意味着它也是最好的解决方案。使用'exec()'和'eval()'通常被认为是“要避免”。