我有一个名为 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 -c <cmd>
允许您将 Python 代码字符串传递给解释器。因此,我们只需要编写一个单行脚本(分号 do 在 Python 中工作;通常不需要并且不鼓励使用分号)来导入 .py
文件并调用该函数。比如:
output.txt: sample.py
python -c "import sample; print(sample.B())" > output.txt
如果不稍微修改一下你的脚本,你就无法做到这一点。
最简单的方法是让脚本调用函数并使用
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 也会将每个输出转换为字符串。