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

4 投票
5 回答
7637 浏览
提问于 2025-04-15 17:12

假设你有一个程序,里面定义了多个函数。每个函数都是在不同的循环中被调用的。你能否通过命令行指定要调用哪个函数呢?

举个例子:

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) 这个函数。

撰写回答