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

时间:2009-12-19 16:45:30

标签: python command-line function

假设您有一个定义了多个功能的程序。每个函数都在一个单独的for循环中调用。是否可以通过命令行指定应该调用哪个函数?

示例:

python prog.py -x <<<filname>>>

其中-x告诉python转到特定的for循环,然后执行for循环中调用的函数?

谢谢, Seafoid。

5 个答案:

答案 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()'通常被认为是“要避免”。