Python - 指定要在命令行中使用的文件中的哪个函数

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)


me_*_*and 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])
Run Code Online (Sandbox Code Playgroud)

a(filename)如果你跑,哪个跑python file.py -a filename