【问题标题】:Azure Runbooks - Parse Python ParamsAzure Runbooks - 解析 Python 参数
【发布时间】:2018-11-15 23:59:03
【问题描述】:

我有一本运行手册,我正在尝试解析输入到 POST 请求正文中的参数(使用 Postman)。我查看了这个thread,但无法让它工作。

我试图获取参数的运行手册代码:

mode = str(sys.argv[1])
resource_group_name = str(sys.argv[2])
vm_name = str(sys.argv[3])

这是我的邮递员电话:

错误信息:

在 raw_decode obj 中,end = self.scan_once(s, idx)ValueError: Expecting 属性名称:第 1 行第 2 列(字符 1)

【问题讨论】:

    标签: python json azure azure-runbook


    【解决方案1】:

    这是因为当您将 postman 的 json 传递给 runbook 时,runbook 会将整个 json 字符串作为一个参数,您可以使用 print(sys.argv[1]) 来检查此行为。输出如下:

    在您的情况下,有一种解决方法。获取入参时,获取RequestBody:之后的这一段,这一段:{"resource_group_name":"vv1","vm_name":"vv2"},这是一个json字符串然后就可以解析json字符串了,得到你想要的值。

    示例代码如下:

    import sys
    import json
    
    #view the input parameter
    print(sys.argv[1])
    
    input_str = sys.argv[1]
    
    # use "1" in index() method, to ignore the first { symbol in the input parameter
    start_str = input_str.index("{",1)
    
    end_str = input_str.index("}",1)
    
    str = input_str[start_str:end_str+1]
    
    text = json.loads(str)#parse the json string
    
    #check the value
    print("resource_group_name: "+text["resource_group_name"])
    print("vm_name: "+text["vm_name"])
    

    测试结果如下:

    【讨论】:

    • 您好,感谢您的反馈。但我不确定你是如何做到这一点的。有几件事: - 包含所有信息的第一个参数位于索引 0 而不是 1(即sys.argv[0]) - 对我来说,即使我打印索引 01 等等 -我没有得到想要的输出。它在大约 20 个字符后停止……基本上,在我传入正文的第一个属性之后。 - 有趣的是,当传递 3 个参数时,我无法访问第三个参数。它不会打印任何东西。与此同时,微软也回过头来推荐了基于 PowerShell 的运行手册。
    • @DevKing,你可以问任何你想知道的。它在我身边有效。
    • 因此,即使我只使用您的代码并仅打印参数,输出也是这样的:{WebhookName:v2,RequestBody:\t{"Mode" 不多...我将探索 PowerShell 运行手册。 Microsoft 确认某些东西似乎无法使用 Python 运行手册。不过还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-10-08
    • 2018-07-11
    • 2016-04-13
    • 1970-01-01
    • 2018-08-01
    • 2018-12-14
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多