2016-12-06 3 views
0

У меня есть утилита python, предоставляющая результаты в JSON через веб-сервер. То, как это делается, - это напечатать «Content-type: text/html \ n», а затем распечатать результат JSON.dumps. Эта работа прекрасна, и я могу заставить клиента python открыть URL-адрес и загрузить JSON в качестве объекта с помощью JSON.loads.Вывод данных в формате msgpack с помощью python как cgi

Теперь я хотел бы сделать что-то подобное с msgpack, чтобы получить скорость. Я попытался сделать тот же процесс, но с msgpack.packb и msgpack.unpackb, но проблема в том, что все двоичные значения рассматриваются как текст, а msgpack не может справиться с этим.

Например, вместо того чтобы получать

b"\x82\xa1a\x05\xa1b\x07" 

для объекта { "а": 5, "б": 7}, я получаю

b'b"\\x82\\xa1a\\x05\\xa1b\\x07"\n' 

Есть стандартный способ сделать это? Я не хочу открывать сокет специально для обслуживания этих msgpack-данных.

ответ

0

Я действительно нашел, как это сделать. Вы должны использовать стандартный вывод вместо печати сохранить msgpack информацию в двоичном формате:

sys.stdout.buffer.write(b"Content-Type: application/msgpack\n\n") 
sys.stdout.buffer.write(msgpack.packb(object)) 

Теперь клиент просто должен позвонить

import msgpack 
from urllib.request import urlopen 
msgpack.unpack(urlopen("url_calling_above_code")) 

 Смежные вопросы

  • Нет связанных вопросов^_^