我想将参数从 azure 数据工厂管道 webhook 活动传递到我的 azure 自动化 python runbook。 我该怎么做?
对于这个问题,我在我这边测试了一下,发现很难通过数据工厂管道中的webhook活动请求python runbook。我在 Runbook 中的 python 代码如下所示:
#!/usr/bin/env python3
import sys
import re
import json
from urllib import parse
def fixJSON(string):
res = re.sub(r"([^{}:,]+):([^{}:,]+),?", r'"\1":"\2",', string )
res = re.sub('"[ ]*,[ ]*}', '"}', res)
# and empty string
res = re.sub("\"(''|\")\"", '""', res)
# property : {...}
res = re.sub(r"([^{}:,]+)(?=:{)", r'"\1"', res )
return res
print("===")
test = str(sys.argv[1])
jsonStr = fixJSON(test)
jsonStr = jsonStr.replace("\"\"", "\"")
print(jsonStr)
jsonData = json.loads(jsonStr)
print(jsonData["RequestBody"])
我用请求正文测试它:
{
"name":"hury"
}
如果我在邮递员中测试它,如下图所示(请求正文中没有换行符),它工作正常:
但是如果请求正文中有换行符(如下图所示),则在 python runbook 中执行
\r\n
时总是会失败。不幸的是,我们似乎无法删除python runbook中的换行符(我用多种方法进行了测试,例如replace("\r\n", "")
,xxx.rstrip()
,它们都不起作用)
如果我们只需要在postman中请求,我们可以设置请求体不带换行符。但是,如果我们在数据工厂的 webhook 活动中请求它,即使我只是将请求主体设置为一行,请求主体似乎也会使用换行符进行格式化:
所以我建议您使用“Web”活动而不是“Webhook”活动,因为在“Web”活动中我们可以输入字符串而不是json数据作为请求正文。如果在“Webhook”活动中,它不允许我们在请求正文中输入无效的 json 数据。
正如 Hury Shen 提到的,使用正则表达式解析 sys.argv 值是我看到的唯一选项。我尝试了很多方法来找到一种更复杂/更美观的方法,但到目前为止还没有这样的选项。
我有 1 个解决方法,
使用 powshell 编排你的 Python Runbook。 我知道这不是利基解决方案,但在我必须编写大量 Python 代码的地方帮助了我。
评论提出进一步问题,很乐意帮忙