如何用 fabric 解析这些数据?

How do I parse this data with fabric?

我使用 fabric 执行 scrapyd 任务,服务器 returns 正在执行的任务的 id,但我想在下面获取此代码并将所有 id 放入列表中,但是当我使用 r.status 出现error: '_AttributeString' object has no attribute 'status' 错误,如何获取所有id?代码打击:

@task
def stop_slave_machine(slave_ip = None):
    jobs_id = []
    with cd("/spider/distributed/wzws"):
        if not None:
            r = local("curl http://%s:%s/listjobs.json?project=WzwsSpider" % (slave_ip, scrapyd_port))              
            print(r.status)

和服务器return数据:

{"status": "ok", "running": [{"start_time": "2016-03-28 18:21:21.951943", "id": "d10eae6cf4ce11e5a6646cae8b23c5da", "spider": "wzws"}, {"start_time": "2016-03-28 18:21:26.945244", "id": "d11a47f4f4ce11e5a6646cae8b23c5da", "spider": "wzws"}, {"start_time": "2016-03-28 18:21:31.941162", "id": "d12320ccf4ce11e5a6646cae8b23c5da", "spider": "wzws"}, {"start_time": "2016-03-28 18:21:36.941122", "id": "d12975b2f4ce11e5a6646cae8b23c5da", "spider": "wzws"}, {"start_time": "2016-03-28 18:21:41.941010", "id": "d131096cf4ce11e5a6646cae8b23c5da", "spider": "wzws"}], "finished": [], "pending": [], "node_name": "XXXXXXX"}

返回的是 JSON 尸体。您可以使用 python 的 json 库将响应转换为 python 对象。从那里您可以遍历 "running" 的列表以提取每个 id

像这样:

from json import loads

# turn r into a python object as long as r is a string (hence loads not load)
returned = loads(r)

# Make a list ids from a list comprehension where we pull out the value
# id from each item in the list 'running' from the object returned
ids = [ r["id"] for r in returned["running"] ]