[在PyCharm中使用python发布Azure functionapp

问题描述 投票:1回答:2

我有一个天蓝色功能应用程序,可用于简单测试。为了(半)自动运行一些测试,我希望能够从python脚本中自动上载一组函数应用程序到azure。

因此我os.chdir()进入相应的文件夹,然后尝试运行发布命令。

如果我手动运行发布命令(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')

在执行此操作之前,我通过运行并评估以下语句的输出来确保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中毫无问题地获得函数app的appsettings,因此不登录就没有问题:

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)

Update:这是在Windows 10,Python 3.7,PyCharm 2019.3.4上

有人有想法或有效的代码吗?

:我am意识到azure.core.cli存在,但是,该文献记录不充分,并且无法使用Azure核心功能工具。

python azure pycharm azure-functions
2个回答
1
投票

事实证明,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
投票
import os
import subprocess
print(u'Test Beginning!')
input('input:')
os.system('func azure functionapp publish yourfunctionname --force')
input('input:')
print(u'Test Endding!')

此代码对我来说很好用,请尝试一下。(在功能文件夹中运行脚本。)

© www.soinside.com 2019 - 2024. All rights reserved.