Python - 指定命令行中使用文件中的哪个函数
假设你有一个程序,里面定义了多个函数。每个函数都是在不同的循环中被调用的。你能否通过命令行指定要调用哪个函数呢?
举个例子:
python prog.py -x <<<filname>>>
这里的 -x 是告诉 Python 去某个特定的循环,然后执行那个循环中调用的函数吗?
谢谢,
Seafoid。
5 个回答
4
如果你只是想在开发过程中快速测试不同的功能,或者在类似的情况下使用这个,你可以用 -c
这个命令行参数:
python -c 'import myfile; myfile.somefunc()'
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
9
你需要用到 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])
如果你运行 python file.py -a filename
,那么就会执行 a(filename)
这个函数。