2016-03-28 12 views
0

Ich benutze Stoff führen Scrapyd Aufgabe, der Server gibt die ID der Aufgabe wird ausgeführt, aber ich möchte diesen Code unten und setzen Sie alle ID in Liste, aber wenn ich r.status verwenden, treten Fehler: '_AttributeString' Objekt hat kein Attribut 'Status' Fehler, wie bekomme ich alle id den Code Schlag:Wie analysiere ich diese Daten mit Fabric?

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

und den Server Rückgabedaten:

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

Antwort

0

Das ist ein JSON Körper zurückgeführt wird. Sie können die json-Bibliothek von Python verwenden, um die Antwort in ein Python-Objekt umzuwandeln. Von dort können Sie über die Liste von "running" iterieren, um die id für jedes herauszuziehen.

Etwas wie folgt aus:

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

Ich brauche einen Parameter r = local ("curl http: //% s:% s/listjobs.json Projekt = WzwsSpider" add% (slave_ip, scrapyd_port), capture = True) – rowele

+0

Ich folge nicht. Ich habe angenommen, dass "r" bereits in meinem Vorschlag enthalten ist. Ich kann es bearbeiten, um Ihren Code zwischen die "Import" -Leitung und den "Lasten" -Aufruf zu stellen, wenn es klarer würde. – Morgan

+0

Ja, ich weiß. Danke – rowele

Verwandte Themen