我有一个 Python 脚本,它检查我的语言翻译文件(CSV 格式),如果所有行都包含 CSV 第一个标题行中包含的所有语言的翻译。脚本列出了缺少翻译的文件/行。如果没有发现问题,则输出 OK。 我的问题如下: 如何从 makefile 中调用脚本并检查输出是否正常?如果脚本打印的不是 OK,我希望 makefile 停止。
有任何想法吗?
make
检查输出状态,而不是输出的文本。最简单的解决方案是sys.exit(1)
在您的 python 脚本中使用,如果它没有检查出 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 as make makethis
。
如果修改 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)
作为我对这个问题的回答
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
如果你展示了你的代码,我可以更好地实现我的答案。