Форум сайта python.su
0
Есть задача получить значения с двух словарей. Есть значения, которые получаются когда выполняется запрос параметром devs и pools, но я не знаю как их объединить. Измененный код такой
import socket import json import sys def linesplit(socket): buffer = socket.recv(4096) done = False while not done: more = socket.recv(4096) if not more: done = True else: buffer = buffer+more if buffer: return buffer api_command = sys.argv[1].split('|') if len(sys.argv) < 3: api_ip = '127.0.0.1' api_port = 4028 else: api_ip = sys.argv[2] api_port = sys.argv[3] s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((api_ip,int(api_port))) if len(api_command) == 2: s.send(json.dumps({"command":api_command[0],"parameter":api_command[1]})) else: s.send(json.dumps({"command":api_command[0]})) response = linesplit(s) response = response.replace('\x00','') response = json.loads(response) if api_command[0]=="devs+pools": j=1 for i in response["DEVS"+"POOLS"]: print j, i["Temperature"], i["MHS 5s"], i["URL"] j+=1 else: print response s.close()
# python apy.py devs+pools Traceback (most recent call last): File "apy.py", line 38, in <module> for i in response["DEVS"+"POOLS"]: KeyError: 'DEVSPOOLS'
Отредактировано Demontager (Май 16, 2014 12:43:33)
Офлайн
88
Предположительно так:
from itertools import chain for i in chain(response["DEVS"], response["POOLS"]): pass
Офлайн
0
А как весь код тогда будет выглядеть ? Я попробовал как ниже, но не работает.
import socket import json import sys def linesplit(socket): buffer = socket.recv(4096) done = False while not done: more = socket.recv(4096) if not more: done = True else: buffer = buffer+more if buffer: return buffer api_command = sys.argv[1].split('|') if len(sys.argv) < 3: api_ip = '127.0.0.1' api_port = 4028 else: api_ip = sys.argv[2] api_port = sys.argv[3] s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((api_ip,int(api_port))) if len(api_command) == 2: s.send(json.dumps({"command":api_command[0],"parameter":api_command[1]})) else: s.send(json.dumps({"command":api_command[0]})) response = linesplit(s) response = response.replace('\x00','') response = json.loads(response) if api_command[0]=="devs+pools": j=1 from itertools import chain for i in chain(response["DEVS"], response["POOLS"]): print j, i["Temperature"], i["MHS 5s"], i["URL"] j+=1 else: print response s.close()
# python apy.py devs+pools Traceback (most recent call last): File "apy.py", line 39, in <module> for i in chain(response["DEVS"], response["POOLS"]): KeyError: 'DEVS'
Отредактировано Demontager (Май 16, 2014 13:10:30)
Офлайн
88
{u'devs': [{u'STATUS': [{u'STATUS': u'S',……..Маленькими.
Офлайн
0
for i in chain(response["devs"], response["pools"]):
# python apy.py devs+pools 1 Traceback (most recent call last): File "apy.py", line 40, in <module> print j, i["Temperature"], i["MHS 5s"], i["URL"] KeyError: 'Temperature'
if api_command[0]=="devs": j=1 for i in response["DEVS"]: print j, i["Temperature"], i["MHS 5s"] j+=1
# python apy.py devs
1 73.0 1.4466
2 73.0 1.4491
Отредактировано Demontager (Май 16, 2014 13:48:39)
Офлайн
0
Почти получилось
if api_command[0]=="devs+pools": j=1 for i in range(len(f["devs"][0]["DEVS"])): d=f["devs"][0]["DEVS"][i] p=f["pools"][0]["POOLS"][i] print i, d["Temperature"], d["MHS 5s"], p["URL"] else: print response
0 72.0 1.4447 stratum+tcp://stratum1.suchpool.pw:3335 1 72.0 1.4445 stratum+tcp://stratum2.suchpool.pw:3335
Отредактировано Demontager (Май 17, 2014 02:20:51)
Офлайн