CSV の最初のヘッダー行に含まれるすべての言語の翻訳がすべての行に含まれている場合、言語翻訳ファイル (CSV 形式) をチェックする Python スクリプトがあります。スクリプトは、翻訳が欠落しているファイル/行をリストします。問題がなければ OK を出力します。 私の質問は次のとおりです。 メイクファイル内からスクリプトを呼び出して、出力が正常かどうかを確認するにはどうすればよいですか? OK 以外の何かがスクリプトによって出力された場合は、makefile を停止します。
何か案は?
make出力されるテキストではなく、出力ステータスをチェックします。最も簡単な解決策は、sys.exit(1)チェックアウトが OK でない場合に Python スクリプトで使用することです。
例えば:
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
あなたのコードを見せてくれたら、私の答えをもっとうまく実装できます。