【发布时间】:2017-03-01 21:30:54
【问题描述】:
所以我有一个使用 Pyro4(Python 远程对象)的简单应用程序。有一个公开的类API,我有一个文件调用函数api.parse(input,userid),它返回一些依赖于输入的JSON。但是,它不是简单地将结果作为字符串返回(它以前做过),而是返回 {'data': 'eyJlcnJvciI6ICJDb21tYW5kIG5vdCByZWNvZ25pc2VkIn0=', 'encoding': 'base64'}
,其中 base64 是 parse 应该返回的 JSON 字符串。
我很困惑为什么这不起作用 - 我之前已经测试过它并且没有问题,只是返回的字符串没有奇怪的 base64 编码。我唯一能想到的是我已经改变了网络(学校连接到家庭连接),但我认为这应该不是问题吗?我已经准备了一个 MVE,其中包含一些指示问题的代码。
testserver.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"}'
注意 - 在 parse() 中应用 prep 的阶段打印会得到预期的结果 b'{"error":"Command not recognised"}'。如果这也很重要,我正在使用命令python3 -m Pyro4.naming 来启动名称服务器。我在想可能有一些全局设置/常数我没有正确设置或其他什么 - 欢迎所有回复,谢谢!
【问题讨论】:
-
也只是一个注释 - 是的,我可以解码 base64 字符串,但我想知道 为什么 它这样做(如果我编写代码来解码 base64 并且它切换回来我必须重新调试它)。
标签: python json network-programming remoteobject pyro