You probably need to accumulate a buffer and try to decode it, when succeeded
return the object and read more. See example below (note that for sockets
select might be a better option for reading data).
import json
from time import sleep
def json_decoder(fo):
buff = ''
decode = json.JSONDecoder().raw_decode
while True:
line = fo.readline()
if not line:
break
buff += line
print('BUFF: {}'.format(buff))
try:
obj, i = decode(buff)
buff = buff[i:].lstrip()
yield obj
except ValueError as e:
print('ERR: {}'.format(e))
sleep(0.01) # select will probably be a better option :)
def main():
import sys
for obj in json_decoder(sys.stdin):
print(obj)
if __name__ == '__main__':
main()
--
http://mail.python.org/mailman/listinfo/python-list