2016-12-07 2 views
0

私は、Windows上でcmdを使って構築してきた白いラベルのAndroidアプリケーションを開発中です。これは私が思い付いたものですので、私は、Pythonにこれらのコマンドを転送する必要があります。check_commandでPythonが文字列を破る

旧コマンドは、バッチファイルにあった:

gradlew assembleRelease 
-Pandroid.injected.signing.store.file="**${FILELOCATION}" 
-Pandroid.injected.signing.store.password="${PASSWORD}" 
-Pandroid.injected.signing.key.alias="${SLUG}" 
-Pandroid.injected.signing.key.password="${PASSWORD}" 

これは、私は、Python 2.7でこれも翻訳です:

check_call([GRADLEW, ':app:assembleRelease' + 
        ' -Pandroid.injected.signing.store.file="{}"'.format(key_info['file']) + 
        ' -Pandroid.injected.signing.store.password="{}"'.format(key_info['store_pw']) + 
        ' -Pandroid.injected.signing.key.alias="{}"'.format(key_info['alias']) + 
        ' -Pandroid.injected.signing.key.password="{}"'.format(key_info['key_pw'])], 
        cwd=os.path.join(PROJECT_ROOT, 'app')) 

これは、次のエラーが発生:

Command '['C:\Data\****\gradlew.bat', ':app:assembleRelease -Pandroid.injected.signing.store.file="C:\Data\****.keystore" -Pandroid.injected.signing.store.password="****" -Pandroid.injected.signing.key.alias="****" -Pandroid.injected.signing.key.password="****"']' returned non-zero exit status 1

これは私がWHE取得Gradleの誤りがありますnは、このコマンドを実行している:

  • What went wrong: Project 'assembleRelease -Pandroid.injected.signing.store.file="C' not found in project ':app'.

しかし、私はコピーして、このPythonスクリプトからの出力を貼り付け、アンドロイドスタジオ端子とCMDを通してそれを実行すると、それだけで正常に動作します。だから、pythonは結局どのようにコロンで私のkey_info ['file']文字列を切り捨てているようです。ここで何が起こっていますか?引数にスペースがあるとき

答えて

2

subprocess.callは、あなたが欲しいものではありませんこれは、引用符を追加します(痛い、リストの2番目の要素は1つの唯一の引数として見られている!)

は、私が代わりに、手動で引数をトークン化だろうそれらをスペースで連結してください。これははるかにきれいで持ち運びが簡単です:

call([GRADLEW,':app:assembleRelease', 
    '-Pandroid.injected.signing.store.file="{}"'.format(key_info['file']), 
    '-Pandroid.injected.signing.store.password="{}"'.format(key_info['store_pw']), 
    '-Pandroid.injected.signing.key.alias="{}"'.format(key_info['alias']), 
    '-Pandroid.injected.signing.key.password="{}"'.format(key_info['key_pw'])], 
    cwd=os.path.join(PROJECT_ROOT, 'app')) 
+0

それでした!ありがとう:)私は8分であなたの答えを受け入れます、あなたはそれを受け入れることができないほど速いです。 – Michiel