Python: 从脚本中调用函数

Python: Call functions out of a script

假设我有以下示例脚本:

#!/usr/bin/python
import sys

def hello():
    return "Hello, I am a script!"
def bye():
    return "Hope to see you again!"

如果我从命令行调用此脚本 python example.py我如何访问 hello() and/or bye().

我只知道如何调用这样的函数:

if __name__ == '__main__':
    hello()

回复评论:

您不能直接调用脚本中的函数并带有脚本参数,您必须自己处理命令行参数然后调用函数:

#!/usr/bin/python
import sys

def hello():
    return "Hello, I am a script!"

def bye():
    return "Hope to see you again!"

if __name__ == '__main__':
    for arg in sys.argv[1:]:
        if arg == "hello":
            print hello()
        elif arg == "bye":
            print bye()

当然,您可能希望以多种方式扩展它:仅处理第一个参数(本示例处理所有参数),将参数小写,以便 HELLOBYE 也工作,或者如果没有给出参数,可能会显示一些帮助。

正如@bufh 所提到的,如果您的命令行参数将变得比这复杂得多,那么您可能需要查看一个可以为您处理它的库,例如 argparse.

您可以:

python -c 'import example;example.hello()'
python -c '__import__("example").hello()'

无论您问这个问题的原因是什么(其他作者会告诉您使用 optparse or argparse, ... like they are doing in the stdlib [timeit or json] 通常是更好的主意),它 可能的。

一种快速而肮脏的方法是:

import sys

def hello():
    print "Hello world"

def goodbye():
    print "Goodbye, cruel world!"

if __name__ == "__main__":
    func_name = sys.argv[1]
    func = globals()[func_name]
    func()

然后你可以运行myscript.py hellomyscript.py goodbye,当你添加其他global/top级别的功能时,它们会立即起作用。

更好的方法是使用 argparse 甚至 https://docs.python.org/dev/library/argparse.html#sub-commands