我有一个Python脚本,它检查我的语言翻译文件(CSV格式),如果所有行包含CSV的第一个标题行中包含的所有语言的翻译。脚本列出缺少翻译的文件/行。如果没有找到问题,则输出OK。 我的问题如下: 如何从makefile中调用脚本并检查输出是否正常?如果脚本打印出除OK之外的其他内容,我希望makefile停止。
有什么想法吗?
答案 0 :(得分:3)
make
检查输出状态,而不是输出的文本。最简单的解决方案是在python脚本中使用sys.exit(1)
,如果它没有检出OK。
例如:
targetfile: dependsonfile
python pythonscript.py -o targetfile dependsonfile
当然,实际的语法将主要取决于pythonscript.py
的调用方式。
如果您的pythonscript只是进行检查,您可以按如下方式完成:
makethis: didcheck
echo "made it" > makethis
didcheck: #dependencies here
python -c 'import sys; sys.exit(1)'
touch didcheck
然后你将make调用为make makethis
。
答案 1 :(得分:0)
作为我对this question
的回答import os
import copy
import subprocess
def command(command):
env = copy.deepcopy(os.environ)
proc = subprocess.Popen(command,
shell=True, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = proc.stdout.read()
return result
ret = command(YOUR COMMAND HERE)
if ret == "OK":
print "yay"
else:
print "oh no!: %s" % ret
如果你展示了你的代码,我可以更好地实现我的答案。
答案 2 :(得分:0)
如果修改Python脚本以便使用退出代码指示其结果是不可能的,您可以在Make中按如下方式实现它(假设您使用* nix):
check-i18n:
@if [ `python your_script.py` = 'OK' ]; \
then echo "good enough"; \
else echo "too bad"; exit 1; \
fi
另一种选择,不太可读,但跨平台(因此它也适用于Windows):
# String equality check.
eq = $(findstring $1,$(findstring $2,$1))
check-i18n:
@$(if $(call eq,OK,$(shell python your_script.py)), \
echo "good enough", \
echo "too bad"; exit 1)