0

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

有任何想法吗?

4

3 回答 3

3

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

于 2012-08-13T13:28:01.703 回答
1

如果修改 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)
于 2012-08-13T19:34:19.467 回答
0

作为我对这个问题的回答

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

如果你展示了你的代码,我可以更好地实现我的答案。

于 2012-08-13T13:30:44.130 回答