有人可以帮助我找到一种从makefile中的python脚本捕获返回值的方法python脚本重新运行失败时构建错误。
mymakefile.mak
python mySample.py <arg1> <arg2>
//在这里调用python脚本,如何获取脚本的返回值?
mySample.py
SUCCESS 0
FAIL 1
if(true)
exit(SUCCESS)
else:
exit(FAIL)
预先感谢。
如果您的Python脚本以非零代码退出,make
将检测到这一点,并告诉您发生错误。因此,您无需做任何其他事情。
示例,如果我有一个可以执行此操作的程序foo.py
:
print 'running foo'
exit(1)
和 Makefile
这样:
foo:
python foo.py
我运行 make foo
,我得到输出:
python foo.py
运行foo
make:*** [foo]错误1
因此它检测到了错误。
另一方面,您要做的是在makefile中记录命令的返回值,您可以使用$?
变量,该变量存储命令的最后一个返回值。
有几件事要注意:
- 必须将美元符号逃脱到makefile中,因此在命令中变成
$$?
- 由于makefile中的每个命令都是在单独的外壳中运行的,因此您必须在与您正在运行的命令相同的子壳中捕获输出(即使与您关心的命令的输出捕获部分相同)
示例:
build:
python mySample.py ; echo $$? > output
运行make
后,您将拥有一个名为output
的文件,其中包含mySample.py
的返回值。
做到的一种方法是让您的python脚本写入您要在Makefile中使用的值到输出文件。然后,您的makefile可以从该中介文件中读取值。
示例:
with open("intermediary.tmp", "wb") as h:
h.write(SUCCESS)