如何在Makefile中获取Python脚本的返回值?

3

请帮我找到一种方法,在 Makefile 中捕获 Python 脚本的返回值。我的情况是,通过 Makefile 构建源代码,并且当 Python 脚本重新运行失败时,应该抛出构建错误。

myMakefile.mak

python mySample.py <arg1> <arg2> // 在这里调用 Python 脚本,如何获取脚本的返回值?

mySample.py

SUCCESS 0
FAIL 1

if(true)
  exit(SUCCESS)
else:
  exit(FAIL)

Thanks in advance.


我不确定,但我认为如果Python脚本失败,则错误级别将像任何其他应用程序一样提高,因此make也会失败。现在,在Makefile中无法管理此错误,因此,如果您想要更多选项来管理此错误或将Python脚本的结果捕获到您的Makefile中,那我就退出了。 - Tim
2个回答

2

如果您的Python脚本退出时返回非零代码,make将检测到并告诉您发生了错误。因此,您无需执行其他操作。

例如,如果我有一个名为foo.py的程序执行以下操作:

print 'running foo'
exit(1)

以下是一个类似于 Makefile 的文件:

foo:
    python foo.py

当我运行make foo命令时,会得到如下输出:

python foo.py

running foo

make: *** [foo] Error 1

所以它检测到了错误。
如果你想在Makefile中记录一个命令的返回值,可以使用变量$?,它存储着最后一个命令的返回值。
需要注意的几点是:
  • 在Makefile中必须转义美元符号,即在命令中将其变为$$?
  • 由于每个Makefile中的命令都在单独的shell中运行,因此必须在与你关心的命令相同的子shell中捕获输出(即使输出捕获部分与你关心的命令在同一行)。
例如:
build:
    python mySample.py ; echo $$? > output

运行make后,你将得到一个名为output的文件,其中包含mySample.py的返回值。

1
虽然除非您特别希望make忽略失败,否则您需要以某种方式捕获和传递退出状态;也许是python mySample.py; rc=$$?; echo "$$rc" >output; exit $$rc - tripleee

0

一种方法是让你的Python脚本将你想要在makefile中使用的值写入一个输出文件。然后,你的makefile可以从那个中间文件中读取该值。

例如:

with open("intermediary.tmp", "wb") as h:
    h.write(SUCCESS)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接