我有一个现有的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
我在这里做错了什么?
答案 0 :(得分:2)
我也试图找出客户端的工作原理。这是一个开始的地方:
对于简单的阻止客户端,您可以了解jupyter_test_client和jupyter_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使用)在给出现有内核文件时初始化其客户端的方式。