Итак, у меня есть простое приложение, использующее Pyro4 (Python Remote Objects). Существует открытый класс API
, и у меня есть файл, который вызывает функцию api.parse(input,userid)
, которая возвращает некоторый JSON в зависимости от ввода. Однако вместо того, чтобы просто возвращать результат в виде строки (как это делалось ранее), он возвращает {'data': 'eyJlcnJvciI6ICJDb21tYW5kIG5vdCByZWNvZ25pc2VkIn0=', 'encoding': 'base64'}
, где base64 — это строка JSON, которую должен вернуть parse
.
Я очень смущен тем, почему это не работает - я тестировал это ранее, и проблем не было, строка была просто возвращена без странной кодировки base64. Единственное, о чем я могу думать, это то, что я изменил сети (подключение в школе к домашнему подключению), но я не думаю, что это должно быть проблемой? Я подготовил MVE некоторого кода, указывающего на проблему.
тестовый сервер.py
import Pyro4;
import json;
@Pyro4.expose
class API:
def parse(self,buff,userid):
return prep({"error":"Command not recognised"});
def prep(obj):
return json.dumps(obj).encode("utf-8");
# Pyro stuff
daemon = Pyro4.Daemon() # make a Pyro daemon
ns = Pyro4.locateNS() # find the name server
uri = daemon.register(API) # register the greeting maker as a Pyro object
ns.register("testAPI", uri) # register the object with a name in the name server
daemon.requestLoop()
testclient.py
import Pyro4;
import json;
api = Pyro4.Proxy("PYRONAME:testAPI");
resp = api.parse("whatever","something");
print(resp); # Produces {'data': 'eyJlcnJvciI6ICJDb21tYW5kIG5vdCByZWNvZ25pc2VkIn0=', 'encoding': 'base64'}
# I just want b'{"error":"Command not recognised"}'
Примечание. Печать на этапе применения prep
в parse()
дает ожидаемый результат b'{"error":"Command not recognised"}'
. Я использую команду python3 -m Pyro4.naming
для запуска сервера имен, если это тоже имеет значение. Я думаю, что, вероятно, есть какая-то глобальная настройка/константа, которую я не установил правильно или что-то в этом роде. Приветствуются все ответы, спасибо!