Estoy usando CherryPy para generar y analizar datos para una página web php, pero obtengo un error que no puedo replicar localmente o vía SSH (iniciar sesión en el servidor y ejecutar el script de Python desde el indicador funciona bien).

El mensaje de error adhesivo actual es:

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

Otro pickle se carga bien en una línea anterior, y ambos pickles representan objetos de clase con una variedad de diccionarios y listas de listas. Pero uno de estos funciona y el otro no.

En general, con CherryPy, ¿cuál es la mejor manera de aislar los mensajes de error? Puedo ejecutar la función / cp / desde su URL y puedo ver el registro de errores del servidor web, pero incluso estos dos no siempre dan un mensaje de error (o el error correcto).

Por otro lado, en php, estoy usando este código para recuperar un objeto json que representa una lista de listas de Python:

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

¿Es ese un método aceptable? ¿Cuál es la mejor manera de pasar y generar matrices php a partir de estructuras de datos de Python?

0
Marc Maxmeister 4 jun. 2012 a las 18:09
Actualmente, evitando este problema creando una tabla MySQL y extrayendo datos de esa manera, pero todavía quiero saber por qué el pickle no funciona. ¡No puedo simplemente construir una mesa cada vez que quiero hacer esto!
 – 
Marc Maxmeister
4 jun. 2012 a las 18:37
Ahora estoy seguro de que no puedo guardar y cargar una CLASE llena de datos en este servidor, pero puedo hacerlo en mi máquina local o cuando ejecuto el script de Python desde el indicador SSH. Sin embargo, si guardo un diccionario de diccionarios en un aprieto, funciona bien. ¿Es esto un error de cereza o un comportamiento previsto?
 – 
Marc Maxmeister
5 jun. 2012 a las 05:33

1 respuesta

La mejor respuesta

Creo que tienes diferentes problemas:

  1. Su código no funciona porque PYTHONPATH (sys.path) no son iguales en su intérprete de Python, cuando está conectado a través de ssh y en Python que se está ejecutando para servir la aplicación web. Digo eso porque te estás atando a deserializar los datos de un módulo, que existe (de lo contrario, será ImportError) pero no tiene la declaración class de Data, probablemente un archivo con el mismo nombre ya que ese módulo está en el mismo directorio y tratando de encontrar el class Data en ese archivo. Cuando serializas, no guardas la declaración de clase, solo cómo reconstruir ese objeto.

  2. ¿Qué quiere decir con "el error correcto"? Cuando el entorno es "producción", CherryPy registra de forma predeterminada el seguimiento del último error, por supuesto, puede cambiar el comportamiento predeterminado con manejo de errores personalizado.

  3. Debe seguir con JSON para la comunicación entre idiomas, es bastante estándar y eficiente para analizarse en ambos lados.

Espero que eso ayude.

1
cyraxjoe 30 jun. 2012 a las 02:46
Entonces, si lo entiendo correctamente: si Data se refiere a una instancia de clase en escabeche, en lugar del objeto de clase, ¿no se deshará correctamente?
 – 
Marc Maxmeister
30 sep. 2012 a las 03:09
Por "el error correcto", me refiero a que los mensajes de error ofrecen información útil sobre dónde buscar un error. En este caso, no entendí lo que indicaba el error.
 – 
Marc Maxmeister
30 sep. 2012 a las 03:10
Esto estaba guardando un conjunto de datos local (mismo servidor) como un encurtido. Creo que lo reescribí para guardarlo como JSON y el error se resolvió, como señaló.
 – 
Marc Maxmeister
30 sep. 2012 a las 03:11