0

在 azure 自动化中,当您为 Runbook 定义 Webhook 时,请求的标头将通过WEBHOOKDATA输入参数传递给 Runbook。对于 python 工作簿,参数作为第一个参数传递给脚本。

例如,这是一个运行手册:

import json
import sys

print(sys.argv)

if len(sys.argv) > 1 :
    test = json.loads(sys.argv[1])
    print(test)

这是输入参数WEBHOOKDATA

{"WebhookName":"python-Test-Arguments","RequestBody":"","RequestHeader":{"Cache-Control":"no-cache","Connection":"keep-alive","Accept":"*/*","Accept-Encoding":"gzip","Host":"s2events.azure-automation.net","User-Agent":"PostmanRuntime/7.1.1","action":"myaction","Postman-Token":"312ce179-d2d1-4b5d-935c-d801fc0ba114","x-ms-request-id":"e6b3a5e3-17b3-4d2a-a00c-a1be928acca2"}}

输出(基本上print(sys.argv)

['C:\\Temp\\yjzgss3j.git\\caf4e30b-0cb1-4c60-9e93-e2315b376634', '{WebhookName:python-Test-Arguments,RequestBody:",RequestHeader:{Cache-Control:no-cache,Connection:keep-alive,Accept:*/*,Accept-Encoding:gzip,Host:s2events.azure-automation.net,User-Agent:PostmanRuntime/7.1.1,action:myaction,Postman-Token:312ce179-d2d1-4b5d-935c-d801fc0ba114,x-ms-request-id:e6b3a5e3-17b3-4d2a-a00c-a1be928acca2}}']

json.loads失败

Traceback (most recent call last): File "C:\Temp\yjzgss3j.git\caf4e30b-0cb1-4c60-9e93-e2315b376634",
line 7, in <module> test = json.loads(sys.argv[1].strip()) File "C:\Python27\lib\json\__init__.py",
line 339, in loads return _default_decoder.decode(s) File "C:\Python27\lib\json\decoder.py",
line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Python27\lib\json\decoder.py",
line 380, in raw_decode obj, end = self.scan_once(s, idx)ValueError: Expecting property name: line 1 column 2 (char 1)

JSON 语法对我来说是正确的。可能与编码或 Azure 自动化如何将参数传递给 Runbook 相关。

4

1 回答 1

0

实际上我认为您的问题是格式错误的 JSON 字符串。请注意,您的字符串没有引号:

{WebhookName:python-Test-Arguments}

它应该是这样的:

{"WebhookName":"python-Test-Arguments"}

要解决这个问题,您需要修复您的响应字符串。这是一个讨论这种操作的线程。

于 2018-03-23T20:17:07.277 回答