我有一个天蓝色功能应用程序,可用于简单测试。为了(半)自动运行一些测试,我希望能够从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核心功能工具。
事实证明,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')
import os
import subprocess
print(u'Test Beginning!')
input('input:')
os.system('func azure functionapp publish yourfunctionname --force')
input('input:')
print(u'Test Endding!')
此代码对我来说很好用,请尝试一下。(在功能文件夹中运行脚本。)