CherryPy&php:不能从pickle加载数据类,但可以从服务器上的ssh工作


CherryPy & php: can't load class of data from pickle, but works from ssh on server

我正在使用 CherryPy 为 php 网页生成和解析数据,但收到一个错误,我无法在本地或通过 SSH 复制(登录到服务器并从提示符运行 python 脚本工作正常)。

当前的粘滞错误消息是:

File "modules/flex.py", line 335, in convert
    ref_data = cPickle.load(f2)
AttributeError: 'module' object has no attribute 'Data'

另一个 pickle 在前一行中加载正常,两个 pickle 都表示具有各种字典和列表列表的类对象。但是其中一个有效,另一个无效。

一般来说,对于 CherryPy,隔离错误消息的最佳方法是什么?我可以从它的 URL 运行/cp/函数,我可以查看 Web 服务器错误日志,但即使这两个也不总是给出错误消息(或正确的错误)。

另一方面,在 php 中,我使用此代码来检索表示 python 列表列表的 json 对象:

$obj = file_get_contents($senddata);
$sue = json_decode($obj);

这是一种可以接受的方法吗?从 python 数据结构传递和生成 php 数组的最佳方法是什么?

我认为您有不同的问题:

  1. 您的代码不起作用,因为 PYTHONPATH ( sys.path ) 不一样在你的 Python 解释器中,当你通过 SSH 和 Python 连接时正在运行以服务于 Web 应用程序。我这么说是因为你要反序列化来自模块的数据,它确实存在(否则将被ImportError)但没有Dataclass声明,可能是具有相同名称,因为该模块位于同一目录中并尝试查找class Data在该文件中。序列化时,您不会保存类声明,只是如何保存重建该对象。

  2. "正确的错误"是什么意思?,当环境是"生产",CherryPy默认记录最后一个错误的回溯,当然,您可以使用自定义错误处理来更改默认行为。

  3. 你应该坚持使用JSON进行语言之间的交流,这是非常标准的并且可以有效地在双方进行解析。

我希望这有所帮助。

相关文章: