En Python, el siguiente fragmento de código abrirá un shell interactivo en la ejecución.Python: code.interact (local = locals()) donde stdin/stdout no están disponibles
import code; code.interact(local = locals())
Esto ha demostrado ser tremendamente útil para la depuración en un poco de código que está poco documentado. Uno puede usar el shell para navegar por el entorno dentro del programa y descubrir qué está pasando, incluso sin un depurador. Hasta aquí todo bien.
Ahora el desafío.
El software que estoy usando (que está escrito en Django, por cierto) utiliza algún tipo de mecanismo de programación que luego se dirige a otro proceso Python, a las que no tengo control sobre otra de editar su código. No tengo más información que las variables que le envié para su procesamiento.
Sin embargo, no sé cómo funciona el código ya que la documentación es muy pobre, así que quería usar el método code.interact
para resolver las cosas.
Pero este proceso se inicia en algún lugar en segundo plano por un software de programación especial, por lo que el flujo no va de la aplicación Django a las partes que deseo examinar. En cambio, se envían una señal y un objeto que luego se ejecutan más tarde, en un momento arbitrario (entre 10 y 200 ms) en un proceso completamente diferente. Cuando se reciben la señal y el objeto, stdin/stdout está fuera de la imagen por completo.
Así que pensé que en lugar de usar stdin/stdout para comunicarme con code.interact
podría usar un identificador de archivo o socket Unix especificando el parámetro readfunc
. He intentado esto por open()
ing file y socket, pero fue en vano.
Ahora estoy tratando de hacer que funcione solo desde el proceso de Django, por lo que incluso el problema de programación está fuera de discusión, y mientras el shell interactivo realmente se inicia, se apaga inmediatamente, sin aceptar un archivo con comandos como contenido, ni un socket Unix para el cual los comandos de Python están canalizados.
Para acortar la historia; ¿Es posible comunicarse con un shell interactivo invocado por code.interact
de alguna otra manera que no sea stdin/stdout? ¿Si es así, cómo?
Gracias de antemano.