我有一个名为 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___
我希望,我能很好地解决这个问题。
答案 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