Estoy trabajando en Python Interactive Shell (ActiveState ActivePython 2.6.4 en Windows XP). Creé una función que hace lo que quiero. Sin embargo, he borrado la pantalla, así que no puedo volver atrás y mirar la definición de la función. También es una función multilínea, por lo que la flecha hacia arriba para volver a mostrar las líneas tiene un valor mínimo. ¿Hay alguna forma de devolver el código real de la función? Existen los atributos "code" y "func_code" mostrados por dir(), pero no sé si contienen lo que necesito.Definición de función de pantalla en shell interactivo
Respuesta
No, __code__
y func_code
son referencias al bytecode compilado: puede desensamblarlos (consulte dis.dis
) pero no volver al código fuente de Python.
Por desgracia, el código fuente es simplemente desaparecido, no recordaba a ninguna parte ...:
>>> import inspect
>>> def f():
... print 'ciao'
...
>>> inspect.getsource(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 694, in getsource
lines, lnum = getsourcelines(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 683, in getsourcelines
lines, lnum = findsource(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 531, in findsource
raise IOError('could not get source code')
IOError: could not get source code
>>>
Si inspect
no pueden llegar a ella, que es una indicación bastante indicativa.
Si estuvieras en una plataforma usando GNU readline
(básicamente, cualquier excepto Windows), que podrían ser aprovechadas por el hecho de que readline
sí qué recordar algunos "historia" y puede escribirlo en un archivo ... :
>>> readline.write_history_file('/tmp/hist.txt')
y luego leer ese archivo de la historia - sin embargo, sé de ninguna manera de hacer esto en Windows.
Es posible que desee utilizar algunos IDE con mejores capacidades de memoria, en lugar del intérprete de comandos "en bruto", especialmente en una plataforma como Windows.
Estoy de acuerdo con el IDE.Pero el caparazón parece una ventana de comandos de DOS y el PHB no pregunta qué estoy haciendo. –
tal vez esta es una buena solicitud de función para inactivo ... –
ipython puede ayudar con un IDE rico en una ventana de comandos de DOS, ver http://ipython.scipy.org/moin/ - es tan rico que he perdido la noción de la mayoría de sus características por ahora ;-). –
A menos que exista una forma de hacerlo en el shell de estado activo, no, no hay forma de recuperar el código exacto que ha escrito en el intérprete de comandos. Al menos en Linux, usando Python Shell proporcionado por CPython no hay una forma especial de lograr esto. Tal vez usando iPython.
El atributo func_code es un objeto que representa la función bytecode, lo único que se puede obtener de este objeto es bytecode en sí, no el código "original".
En Linux, 'readline.write_history_file' ayudaría, pero no en Windows. –
No, realmente no. Puede escribir sufunc.func_code.co_code (el bytecode realmente compilado) en un archivo y luego intente usar decompyle o unpyc para descompilarlos, pero ambos proyectos son viejos y no se han mantenido, y nunca han soportado la descompilación muy bien.
Para comenzar, es infinitamente más fácil simplemente escribir su función en un archivo.
Ha pasado bastante tiempo pero alguien puede necesitarlo. getsource
da el código fuente:
>>> def sum(a, b, c):
... # sum of three number
... return a+b+c
...
>>> from dill.source import getsource
>>>
>>> getsource(sum)
'def sum(a, b, c):\n # sum of three number\n return a+b+c\n'
para instalar dill
plazo pip install dill
. Para formatearlo:
- 1. Shell interactivo incorporado en IPython
- 2. Shell interactivo usando PHP
- 3. Ir shell interactivo
- 4. Definición de módulos VS.NET vs F # Interactivo
- 5. shell interactivo de Java como ipython
- 6. shell interactivo de JavaScript con finalización
- 7. ¿Cómo funciona sympy? ¿Cómo interactúa con el shell interactivo de Python y cómo funciona el shell interactivo de Python?
- 8. python: ejecute el shell de python interactivo desde el programa
- 9. ¿Cómo incrustar un shell interactivo de IronPython en una aplicación?
- 10. Cómo escribir shell interactivo con soporte de lectura en Scala?
- 11. ¿Es posible construir un shell C interactivo?
- 12. shell interactivo php no tiene ningún resultado?
- 13. ¿Puede Python imprimir una definición de función?
- 14. miembro definición de función
- 15. ¿Cómo ejecutar un script de shell interactivo usando java Runtime?
- 16. Definición de punteros de función
- 17. ¿Cómo borrar la pantalla en F # interactivo en VS2010?
- 18. ¿Intérprete interactivo de ActionScript?
- 19. Eliminar definición de función (equivalente a unalias)
- 20. Cómo cambio los colores para el shell interactivo F #
- 21. pure-specifier en la definición de función
- 22. Llamar al código d desde un shell interactivo
- 23. ¿Hay un sitio que ofrezca un shell F # interactivo?
- 24. Función definición C
- 25. GCC función fastcall definición
- 26. Javascript Función Definición Sintaxis
- 27. Definición de la función dentro de otra definición de función: ¿es válida?
- 28. C++ definición de objeto de función "mayor"
- 29. Pantalla GNU - Crear pantalla en el comando de ejecución de fondo desde el shell o script
- 30. phpeclipse: saltar a la definición de función?
Le sugerí que utilice la función "ayuda", pero luego me di cuenta de que desea el código real en la función, no solo su firma. –
Me gustaría obtener todo el código que he escrito en la consola como un archivo pero en cuanto a las respuestas que recibió no es posible ... sad –