python - 如何使用 python 从 Azure Function Blob Trigger 获取多个输出?即“引入一个循环,而不是定义这么多的输出块”
问题描述
我在使用 python 在 Azure 中为 blobtrigger 案例定义多个输出时遇到问题。如何将 WhileLoop 的所有尝试设置为 Outputblob?现在,我只得到最后一个实体(替换以前的实体)。我把代码用于--init--.py:
import logging
import json
import azure.functions as func
from urllib.request import urlopen
#from azure.storage import blob
def main(inputblob: func.InputStream,
outputblob: func.Out[func.InputStream]):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {inputblob.name}\n"
f"Blob Size: {inputblob.length} bytes")
blob= inputblob.read()
blob_invoices= json.loads(blob)
Number_of_Invoices=int(len(blob_invoices))
j=0
while j < Number_of_Invoices:
Invoice_url= blob_invoices[j]["invoiceFile"]['url']
invoice_opening= urlopen(Invoice_url)
invoice_content= invoice_opening.read()
outputblob.set(invoice_content)
if __name__ == "__main__":
main()
和function.json:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "inputblob",
"type": "blobTrigger",
"direction": "in",
"path": "data4test1/{name}.json",
"connection": "data4test_STORAGE"
},
{
"name": "outputblob",
"type": "blob",
"direction": "out",
"path": "data4test2/{name}.xml",
"connection": "data4test_STORAGE"
}
],
"disabled": false
解决方案
下面的初始化示例代码将帮助您使用 python 从 Azure 函数 blob 触发器设置多个输出绑定:
import logging
import azure.functions as func
def main(inputblob: func.InputStream,
outputblob1: func.Out[func.InputStream],
outputblob2: func.Out[func.InputStream],
outputblob3: func.Out[func.InputStream]):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {inputblob.name}\n"
f"Blob Size: {inputblob.length} bytes")
outputblob1.set(inputblob)
outputblob2.set(inputblob)
outputblob3.set(inputblob)
函数.json 文件:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "inputblob",
"type": "blobTrigger",
"direction": "in",
"dataType": "binary",
"path": "blobcontainer/{name}",
"connection": "AzureWebJobsStorage"
},
{
"name": "outputblob1",
"type": "blob",
"path": "uploadblobcontainer/{blobtrigger}-first",
"dataType": "binary",
"connection": "AzureWebJobsStorage",
"direction": "out"
},
{
"name": "outputblob2",
"type": "blob",
"path": "uploadblobcontainer/{blobtrigger}-second",
"dataType": "binary",
"connection": "AzureWebJobsStorage",
"direction": "out"
},
{
"name": "outputblob3",
"type": "blob",
"path": "uploadblobcontainer/{blobtrigger}-third",
"dataType": "binary",
"connection": "AzureWebJobsStorage",
"direction": "out"
}
]
}
更新的答案
要列出容器中的 blob, 请使用list_blobs方法。此方法返回一个生成器。以下代码将容器中每个 blob的名称输出到控制台。
generator = block_blob_service.list_blobs('mycontainer')
for blob in generator:
print(blob.name)
同样,在 for 循环中定义所需的功能。
推荐阅读
- azure - Azure 前端 Web APP 和 Azure APIM 相互客户端证书身份验证不起作用
- java - spring-data-hazelcast @Query 注释给出 NullPointerException
- swift - 期望 SwiftUI DynamicProperty 属性包装器的内部更新来触发视图更新是否正确?
- javascript - 谷歌脚本:变量总是显示未定义
- c - 如何在c中正确扫描txt文件中的东西
- vue.js - 构建 Vue 微前端应用(带有路由和 vuex 商店)
- angular - 找不到“路径”模块中的错误:错误:无法解析 - Angular 6 Webpack
- php - Facebook - 消息传递 webhook 不断循环回调 php 文件
- r - 使用 R 和 rvest 进行网页抓取
- docker - 如何从 docker 容器内的应用程序发布 Web 服务?