使用make调用Python函数

问题描述 投票:0回答:2

我有一个名为 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___

我希望我很好地提出了这个问题。

python makefile
2个回答
2
投票

python -c <cmd>
允许您将 Python 代码字符串传递给解释器。因此,我们只需要编写一个单行脚本(分号 do 在 Python 中工作;通常不需要并且不鼓励使用分号)来导入
.py
文件并调用该函数。比如:

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

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 也会将每个输出转换为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.