4

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()の前に実行する必要があるか、接続ファイルが見つからないため、これを管理する方法がわかりません。

4

1 に答える 1

2

ブロックせずにカーネルを埋め込むには、IPythonリポジトリからこの例を見てください。IPythonは、Qtイベントループと統合するための巧妙なトリックをいくつか知っているため、コンソールとアプリケーションを同時に実行できます。インタラクティブなデバッグのようなものについては、これが進むべき道です。

コンソールを独自のアプリケーションに埋め込む必要がある場合は、インプロセスカーネルをマージしました。この例を見てください。次のリリースまでIPython開発バージョンを使用する必要がありますが、初期のテストを取得することは素晴らしいことです。

于 2013-01-17T13:07:29.147 に答える