将子流程输出加载为json时出现问题



我使用的是python 2.7.15。我已经编写了一段代码,其中我使用子流程执行了AWS CLI,并且我希望将输出加载为json以进行进一步处理。执行时的代码和错误如下:

output=subprocess.check_output(['aws','cloudwatch','get-metric-statistics','--namespace','AWS/ELB','--metric-name','RequestCount','--statistics','Sum','--period','3600','--dimensions','Name=LoadBalancerName,Value=prod-mapissl-asphalt','--start-time',otime,'--end-time',ctime])
print(output)

收到的输出:

RequestCount DATAPOINTS 468240.0    2018-11-07T09:12:00Z    Count

预期输出格式如下:

b'{n    "Datapoints": [n        {n            "Timestamp": "2018-11-07T08:03:00Z", n            "Sum": 483274.0, n            "Unit": "Count"n        }n    ], n    "Label": "RequestCount"n}n'
483274.0

该怎么解决?因此,我无法运行json.load(output).

当我运行json.load(output)时,下面的堆栈开始运行:

Traceback (most recent call last):
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
默认情况下,

aws以字符串格式输出信息。在以这种方式解析之前,您需要使用--output选项将其更改为json,使其成为json。

如果您想要编程访问,我建议直接使用boto,而不是依赖于展开和解析命令行输出。这是最后的选择,充其量也是一个古怪的选择。

最新更新