Publi sh azure functionapp с использованием python в PyCharm - PullRequest
1 голос
/ 25 марта 2020

У меня есть приложение azure, которое я использую для простого тестирования. Чтобы (полу) автоматически запускать некоторые тесты, я хочу иметь возможность автоматически загружать набор функциональных приложений в azure из скрипта python.

Поэтому я os.chdir() в соответствующую папку, а затем попробуйте запустить команду publi sh.

Если я запускаю команду publi sh вручную (func azure functionapp publish <name> --python --build remote), все работает нормально. Однако, если я вызываю команду из PyCharm, я всегда получаю сообщение об ошибке (здесь усечено)

The format of value 'Bearer eyJ0eXAiO...
' is invalid

Мой python код выглядит следующим образом:

import subprocess
import shutil

try:
    result = subprocess.run([
        shutil.which('func'),
        'azure', 'functionapp',
        'publish', azure_function_app_resource_name,
        '--python',
        '--build remote'
    ], text=True)
    if result.returncode > 0:
        print('Failed')
    else:
        print('OK')
except FileNotFoundError:
    print('Failed')

Перед выполнением этого I Убедитесь, что функции azure cli / core доступны, запустив и оценив выходные данные следующих операторов. Это работает безупречно.

subprocess.run([shutil.which('az'), '--version'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
subprocess.run([shutil.which('func'), '--version'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

Я также могу без проблем получить настройки приложения-функции в python, поэтому проблема не в том, чтобы не войти в систему:

result = subprocess.run([
    shutil.which('az'), 'functionapp', 'config', 'appsettings', 'list',
    '--name', azure_function_app_resource_name,
    '--resource-group', azure_resource_group_name
], capture_output=True, text=True)

Обновление : Это на Windows 10, Python 3.7, PyCharm 2019.3.4

У кого-нибудь есть идея или рабочий код?

Примечание : я знаю , что azure.core.cli существует, однако он плохо документирован и не помогает с инструментами основных функций azure.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Как оказалось, PyCharm устанавливает переменную окружения с именем PYCHARM_HOSTED. Мои запросы предполагают, что он используется для определения, запускается ли скрипт из PyCharm, но, очевидно, это как-то влияет на процесс публикации.

Чтобы успешно выполнить процесс сборки, его можно удалить из python сценарий до запуска подпроцесса:

import subprocess
import shutil
import os

if 'PYCHARM_HOSTED' in os.environ:
    # try/except would be more pythonic, but longer
    del os.environ['PYCHARM_HOSTED']
try:
    result = subprocess.run([
        shutil.which('func'),
        'azure', 'functionapp',
        'publish', azure_function_app_resource_name,
        '--python',
        '--build remote'
    ], text=True)
    if result.returncode > 0:
        print('Failed')
    else:
        print('OK')
except FileNotFoundError:
    print('Failed')
0 голосов
/ 02 апреля 2020
import os
import subprocess
print(u'Test Beginning!')
input('input:')
os.system('func azure functionapp publish yourfunctionname --force')
input('input:')
print(u'Test Endding!')

Этот код отлично работает на моей стороне, пожалуйста попробуйте. (Запустите скрипт в папке функций.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...