2016-03-28 3 views
0

Я использую функцию выполнения функции scrapyd, сервер возвращает идентификатор выполняемой задачи, но я хочу получить этот код ниже и поместить весь идентификатор в список, но когда я использую r.status, возникает ошибка: объект «_AttributeString» не имеет атрибута «статус» ошибки, как я могу получить все идентификаторы коды удар:Как проанализировать эти данные с помощью ткани?

@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) 

и обратный сервера данных:

{"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"}

ответ

0

Это 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"] ] 
+0

мне нужно добавить параметр г = локальное ("завиток Http: //% s:% s/listjobs.json проект = WzwsSpider" % (slave_ip, scrapyd_port), capture = True) – rowele

+0

Я не следую. Я предположил, что 'r' уже установлен в моем предложении. Я могу отредактировать его, чтобы поместить ваш код между линией 'import' и вызовом' load', если он станет более понятным. – Morgan

+0

Да, я знаю. спасибо – rowele