我想在一台机器上运行一个IPython实例,并通过另一个进程(运行一些python命令)(通过LAN)连接到它。我了解zmq是可能的:http : //ipython.org/ipython- doc/dev/development/ipythonzmq.html。
但是,我找不到有关如何执行操作以及是否可行的文档。
任何帮助,将不胜感激!
编辑
我希望能够连接到IPython内核实例并将其发送给python命令。但是,这不应该通过图形工具(qtconsole)完成,但是我希望能够从其他python脚本中连接到该内核实例。
例如
somehow_connect_to_ipython_kernel_instance instance.run_command("a=6")
如果要在另一个Python程序的内核中运行代码,最简单的方法是连接BlockingKernelManager。现在最好的例子是Paul Ivanov的vim-ipython客户端,或IPython自己的终端客户端。
要点:
IPYTHONDIR/profile_<name>/security/kernel-<id>.json
一个工作示例:
在shell中,执行以下操作ipython kernel(或ipython qtconsole如果要与已经在运行的GUI共享内核,请执行以下操作):
ipython kernel
ipython qtconsole
$> ipython kernel [IPKernelApp] To connect another client to this kernel, use: [IPKernelApp] --existing kernel-6759.json
这写了’kernel-6759.json’文件
然后,您可以运行此Python代码段以连接KernelManager,并运行一些代码:
from IPython.lib.kernel import find_connection_file from IPython.zmq.blockingkernelmanager import BlockingKernelManager # this is a helper method for turning a fraction of a connection-file name # into a full path. If you already know the full path, you can just use that cf = find_connection_file('6759') km = BlockingKernelManager(connection_file=cf) # load connection info and init communication km.load_connection_file() km.start_channels() def run_cell(km, code): # now we can run code. This is done on the shell channel shell = km.shell_channel print print "running:" print code # execution is immediate and async, returning a UUID msg_id = shell.execute(code) # get_msg can block for a reply reply = shell.get_msg() status = reply['content']['status'] if status == 'ok': print 'succeeded!' elif status == 'error': print 'failed!' for line in reply['content']['traceback']: print line run_cell(km, 'a=5') run_cell(km, 'b=0') run_cell(km, 'c=a/b')
运行的输出:
running: a=5 succeeded! running: b=0 succeeded! running: c=a/b failed! --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) /Users/minrk/<ipython-input-11-fb3f79bd285b> in <module>() ----> 1 c=a/b ZeroDivisionError: integer division or modulo by zero
有关如何解释回复的更多信息,请参见消息规范。如果相关,则stdout / err和display数据将过来km.iopub_channel,您可以使用返回的msg_id将shell.execute()输出与给定执行关联。
km.iopub_channel
shell.execute()
PS:对于这些新功能的文档质量,我深表歉意。我们有很多工作要做。