EDIT Ich isoliert ein echtes minimales Beispiel, das nicht funktioniert (es ist ein Teil von komplexeren Code); der Täter ist der inputhook Teil schließlich:wie ipython 0.12 einzubetten, so dass es Namespace des Aufrufers erbt?
def foo():
exec 'a=123' in globals()
from IPython.frontend.terminal.embed import InteractiveShellEmbed
ipshell=InteractiveShellEmbed()
ipshell()
# without inputhook, 'a' is found just fine
import IPython.lib.inputhook
IPython.lib.inputhook.enable_gui(gui='qt4')
foo()
Laufen mit 0,12:
In [1]: a
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/<ipython-input-1-60b725f10c9c> in <module>()
----> 1 a
NameError: name 'a' is not defined
Was die Art und Weise um sein würde?
Es scheint in der Entwicklungsversion zu arbeiten - vielleicht gibt es einen Bug mit 0,12 war, die behoben worden ist:
durch die Schaffung der InteractiveShellEmbed Instanz erste ganz gut, arbeitet Diese Version soll. –
@TomasK: Ich musste das Beispiel komplizieren, damit es wirklich nicht funktioniert. Es hängt mit dem qt4-Inputhook zusammen; es funktionierte gut mit 0.11. – eudoxos