¿Hay alguna manera de recuperar una variable local de una función en ejecución?

Desesperado. Digamos que tenemos lo siguiente:

def main(): ALotOFCode list1 = [] list2 = [] while condition: # a lot of times where raw_input is used in this loop # eg x = raw_input('lots of steps to compute x') y = raw_input('lots of steps to compute y') list1 = list1.append(x) list2 = list2.append(y) stream.write({'x':list1,'y':list2}) #send new data point to plot.ly via raspberry pi 

No se que paso Pero mi ttwig en plot.ly se ha ido. Eliminado por completo. Estaba jugando con lo que tenía en la ttwig hasta ahora en mi PC y luego continué ingresando datos y construyendo la ttwig desde la raspberry pi. Pude ver la ttwig que se está construyendo no hay problema. Luego volví a mi PC y presioné actualizar. Parcela y todos los datos desaparecidos. Volvió a la raspberry. Ya sincronizado. Ido.

Aunque sé que list1 y list2 en este momento, mientras escribo, contienen todos los datos que necesito para rehacer mi ttwig. Pero, ¿hay alguna forma de acceder y guardarlo en un archivo? Mi shell de python está actualmente esperando la entrada a través de raw_input, así que no puedo usar el shell. ¿Hay alguna manera de que pueda ingresar a las variables que están actualmente en el scope del progtwig que aún se está ejecutando? Obviamente, una vez que el progtwig termina, las variables locales son eliminadas.

Por supuesto, si se guarda un historial para cada plot en plot.ly eso ayudaría, pero no puedo encontrar ninguna opción de restauración al estado anterior.

Actualización : Entonces, gracias a Dios, había guardado los resultados de algunos de mis pasos intermedios para archivar. Dejé de intentar acceder a la variable y en su lugar intenté generar list1 y list2 través de un nuevo script sobre la marcha. A las 8:30 de la madrugada, tenía mis datos y, a las 10 de la mañana, mi supervisor, felizmente, los miró sin saber nada. Esta pregunta sigue abierta, pero hasta ahora nadie ha dado una respuesta clara ni ha explicado cómo no es posible acceder directamente a list1 y a list2 . (Repasé cada sugerencia en los comentarios, pero no pude encontrar nada que proporcionara una respuesta)

Comentario final obligatorio: mi fe en Plot.ly se ha roto, al menos por un tiempo.

Para poder “leer” las variables internas con fines de depuración, veo las siguientes ideas:

  1. cree un archivo de registro con una línea para cada cambio de variable y antes de cada función de locking. Incluso si el registro es enorme. Y luego siga log con “tail” en Raspberry (nueva consola o nueva conexión remota).

  2. Transforme las variables para que sean globales y agregue un código que saque todas las variables a la salida estándar cuando se presione una tecla especial, por ejemplo, Ctrl + C que interrumpe casi todo. Si no es posible transformar variables en globales (debido a razones de llamadas anidadas, por ejemplo), cree nuevas variables que contengan los últimos valores conocidos.

El manejo de Ctrl + C se podría hacer así (desde aquí ):

 #!/usr/bin/env python import signal import sys def signal_handler(signal, frame): print('You pressed Ctrl+C!') sys.exit(0) signal.signal(signal.SIGINT, signal_handler) print('Press Ctrl+C') signal.pause() 

Como ves, mis opciones implican modificar el código para que sea hablador o consultable.