使用make调用python函数

时间:2018-04-08 16:19:20

标签: python makefile

我有一个名为 sample.py 的python脚本,包含多个函数。

def A():
    return 3

def B():
    return [i for i in range(2,10)]

我必须编写一个MAKEFILE,它从sample.py调用函数B并将其输出存储到另一个文件(比如output.txt),即我希望从中运行 make output.txt 命令行并存储从sample.py调用函数B的结果。我怎么写它的食谱? 我们可以直接从MAKEFILE调用脚本,但是如何调用特定的函数。

output.txt:sample.py
    ___recipe___

我希望,我能很好地解决这个问题。

2 个答案:

答案 0 :(得分:1)

你无法做到这一点,而不是稍微使用你的脚本。

最常用的方法是让脚本调用函数并使用sys.exit返回值。

import sys

def b():
    return [i for i in range(2, 10)]

if __name__ == '__main__':
    sys.exit(b())

如果需要能够调用不同的函数,可以使用允许从外部调用的函数字典,并将函数的名称作为脚本参数提供。然后可以使用sys.argv恢复此操作。您甚至可以将额外的参数作为函数参数

import sys

def foo(x):
    return list(range(int(x)))

def bar():
    return 'bar was called!'

functions = {
    'foo': foo,
    'bar': bar,
}

if __name__ == '__main__':
    func = functions[sys.argv[1]]
    args = sys.argv[2:]

    sys.exit(func(*args))

然后我可以从命令行调用这些函数,你也可以从makefile中调用它们。

>python sample.py foo 1
[0]
> python sample.py foo 2
[0, 1]
>python sample.py bar
bar was called!

请注意,整数将被解释为退出代码,以这种方式传递的每个参数都将是一个字符串,Python也会将每个输出转换为字符串。

答案 1 :(得分:1)

python -c <cmd>允许您将一串Python代码传递给解释器。因此,我们只需编写一个单行脚本(分号执行在Python中工作;它们通常不是必需的并且不鼓励),它们导入.py文件并调用该函数。喜欢的东西(从头顶开始;因为我实际上不得不使用make来实现某些东西,所以它几乎是永远的):

output.txt: sample.py
    python -c "import sample; print(sample.B())" > output.txt