2016-03-28 6 views
0

私はファブリックを実行scrapydタスクを使用して、サーバーは、実行されているタスクのIDを返しますが、私はr.statusを使用すると、エラーが発生します:'_AttributeString' オブジェクトは、どのように私はすべての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) 

とサーバーのリターンデータ:

{"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オブジェクトに変換できます。そこから、 "実行中"のリストを繰り返して、それぞれに対してidを抽出することができます。

このような何か:私は地元のパラメータr =( "://%sの?:カールます。http%sの/ listjobs.jsonプロジェクト= WzwsSpider" を追加必要

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

%(slave_ip、scrapyd_portに)、キャプチャ=真) – rowele

+0

私は従いません。私は 'r'が私の提案に既に設定されていると仮定しました。私はあなたのコードを 'import'行と' loads'呼び出しの間に置くように編集して、もっと明確にすることができます。 – Morgan

+0

ええ、私は知っています。どうも – rowele

関連する問題