IPythonテキストコンソールを埋め込むことができるのと同様の方法で、アプリケーションにIPython qtconsoleを埋め込もうとしています。
from IPython.frontend.terminal.embed import InteractiveShellEmbed
myobj={'jason':10}
shell = InteractiveShellEmbed()
shell.user_ns = myobj
shell()
を使用して、アプリケーションで QT コンソールを起動できます
from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp
app = IPythonQtConsoleApp()
app.initialize()
app.start()
ただし、これは既存のオブジェクトにアクセスできません。
以下を使用して、既存のオブジェクトにアクセスできるアプリケーションでカーネルを開始できます。
import IPython
myobj={'jason':10}
IPython.embed_kernel(local_ns=myobj)
#No more code executes
そして、それを使用して接続します
ipython qtconsole --existing
または、別の python スクリプトで:
from IPython.lib.kernel import find_connection_file
from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp
cf=find_connection_file("*")
app = IPythonQtConsoleApp(existing=cf[-1])
app.initialize()
app.start()
ただし、これらはモノリシック ソリューションではなく、どちらも別のシェルが必要です。カーネルは生成されないスレッドで実行されるため、カーネルが存在するまでコードは実行されません。
それで、私の質問は、1 つのスクリプトで上記をどのように達成できるかということです。
スレッドとマルチプロセッシングを使用してみましたが、embed_kernel()が返されず、明らかにIPythonQTConsoleApp()の前に実行する必要があるか、接続ファイルが見つからないため、これを管理する方法がわかりません。