2016-03-28 21 views
0

Kumaşı gerçekleştirme scrapyd görevini kullanıyorum, sunucu gerçekleştirilmekte olan görevin kimliğini döndürür, ancak bu kodu aşağıda almak ve tüm kimliği listeye koymak istiyorum, ancak r.status kullandığımda, hata oluştu: '_AttributeString' nesne hiçbir özelliği 'status' hata vardır bütün kimliği nasıl elde edersiniz kod darbe:?Bu verileri kumaşla nasıl ayrıştırırım?

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

ve sunucu dönüş verilerini:

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

cevap

0

Bu, bir JSON gövdesi iade ediliyor. Yanıtı bir python nesnesine dönüştürmek için python'un json kitaplığını kullanabilirsiniz. Oradan her biri için id çıkarmak için "çalışan" listesinde yineleyebilirsiniz. Böyle

şey:% (slave_ip, scrapyd_port)

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

yerel bir parametre r = ("% s/listjobs.json proje = WzwsSpider: //% s? bukle http" add gerek yakalama = Doğru) – rowele

+0

Takip etmiyorum. Önceden önerim olarak r'nin ayarlandığını varsaydım. Kodunuzu "içe aktarma" satırı ile "yükler" aralığının arasına koyup daha net hale getirecek şekilde düzenleyebilirim. – Morgan

+0

Evet, biliyorum. Teşekkürler – rowele

İlgili konular