使用KernelClient API在ipython内核中执行代码

时间:2015-11-16 09:11:18

标签: python ipython jupyter

我有一个现有的ipython内核,带有通信文件'path / comm_file.json',我想使用内核客户端API在这个内核中执行代码(实际上我不挑剔,任何方法都会这样做..) 。我明白这是从jupyter documentation做事的最佳方式。所以我写下面的代码:

from jupyter_client import KernelClient
client = KernelClient(connection_file='path/comm_file.json')
client.execute('a = 10')

但执行方法会导致以下错误:

  File "C:\Python27\lib\site-packages\jupyter_client\client.py", line 249, in execute
    self.shell_channel.send(msg)
  File "C:\Python27\lib\site-packages\jupyter_client\client.py", line 143, in shell_channel
    socket, self.session, self.ioloop
TypeError: object.__new__() takes no parameters

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

我也试图找出客户端的工作原理。这是一个开始的地方:

对于简单的阻止客户端,您可以了解jupyter_test_clientjupyter_console的工作原理。

operator = s.next("[*,/,+,-]").charAt(fnum + 1);

您需要帮助函数来正确处理zmq通道和json消息。

答案 1 :(得分:2)

我能够为此做一个简单而简单的KernelClient工作:

from jupyter_client.blocking import BlockingKernelClient

kc = BlockingKernelClient(connection_file='path/comm_file.json')

kc.load_connection_file()
kc.start_channels()

msgid = kc.execute('a = 10')
reply = kc.get_shell_msg(timeout=5)

这确实是JupyterConsoleApp(由jupyter_console使用)在给出现有内核文件时初始化其客户端的方式。