2016-12-07 4 views
0

Я работаю над белым ярлыком Android-приложения, которое я создавал через cmd на окнах. Мне нужно, чтобы передать эти команды питона, так что это то, что я придумал:Python breaks string в check_command

Старый команда была в пакетном файле:

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

Это Gradle ошибка я получаю Whe п выполнив команду:

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

Однако, когда я скопировать и вставить вывод из этого питона скрипт и запустить его через андроид студии терминала и КМД, он работает просто отлично. Таким образом, похоже, что python каким-то образом отключает строку key_info ['file'] в двоеточии. Что тут происходит?

ответ

2

когда есть место в рассуждениях, subprocess.call добавляет кавычки, которые не то, что вы хотите (второй элемент списка рассматривается в качестве одного единственного аргумента, ай!)

Я бы разметить аргументы вручную вместо скрепляя их пространствами, которые намного чище и переносимы:

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