如果python脚本输出OK,如何检入makefile

时间:2012-08-13 13:25:43

标签: python makefile

我有一个Python脚本,它检查我的语言翻译文件(CSV格式),如果所有行包含CSV的第一个标题行中包含的所有语言的翻译。脚本列出缺少翻译的文件/行。如果没有找到问题,则输出OK。 我的问题如下: 如何从makefile中调用脚本并检查输出是否正常?如果脚本打印出除OK之外的其他内容,我希望makefile停止。

有什么想法吗?

3 个答案:

答案 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)