Dar*_*ick 4 python command-line function
假设您有一个定义了多个功能的程序.每个函数都在一个单独的for循环中调用.是否可以通过命令行指定应该调用哪个函数?
例:
python prog.py -x <<<filname>>>
Run Code Online (Sandbox Code Playgroud)
其中-x告诉python转到特定的for循环然后执行for循环中调用的函数?
谢谢,Seafoid.
mik*_*iku 10
主入口点的Python习语:
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
你可以利用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]]()
Run Code Online (Sandbox Code Playgroud)
同时在命令行......
$ python 1933407.py second
2 of 9
Run Code Online (Sandbox Code Playgroud)
你想要这个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])
Run Code Online (Sandbox Code Playgroud)
a(filename)
如果你跑,哪个跑python file.py -a filename