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

CherryPy&;php:can';不能从pickle加载数据类,但可以从服务器上的ssh工作,php,json,class,pickle,cherrypy,Php,Json,Class,Pickle,Cherrypy,我正在使用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在前一行中加载良好,两个pickl

我正在使用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数组的最佳方法是什么?

我认为您有不同的问题:

  • 您的代码无法工作,因为PYTHONPATH(
    sys.path
    )不相同 在python解释器中,当您通过ssh和python连接时 它正在运行以服务于webapp。我这么说是因为你想反序列化 来自模块的数据,该模块确实存在(否则将是
    importorror
    ) 但是没有
    数据的
    声明
    ,可能是一个具有相同 该模块的名称位于同一目录中,正在尝试查找
    类数据
    在那个档案里。序列化时不保存类声明,只保存 重建那个物体

  • “正确的错误”是什么意思?当环境 是“生产”,CherryPy默认记录上一个错误的回溯, 当然,您可以使用更改默认行为

  • 您应该坚持使用JSON进行语言间的通信,这是相当标准的 而且在两边都能有效地解析


  • 我希望这会有所帮助。

    目前通过构建MySQL表并以这种方式提取数据绕过了这个问题,但我仍然想知道pickle无法工作的原因。我不能每次想做这件事就做一张桌子!现在我确定我不能在这个服务器上保存和加载一个满是数据的类,但是我可以在本地机器上或者在SSH提示符下运行python脚本时保存和加载。但是,如果我把一本词典保存在pickle中,它就可以正常工作。这是一个cherrypy错误还是预期的行为?因此,如果我理解正确:如果数据引用的是一个pickle类实例,而不是类对象,它将不会正确地取消pickle?通过“正确的错误”-我的意思是,错误消息提供了有关在何处查找错误的有用信息。在本例中,我不理解错误指示的内容。这是将本地(同一服务器)数据集保存为pickle。我想我重写了它以另存为JSON,错误得到了解决——正如您所指出的。