让IPython从网络套接字接受命令并在主线程中执行

2 投票
2 回答
514 浏览
提问于 2025-04-17 08:02

我正在尝试设置我的Vim,以便可以向正在运行的IPython实例发送命令。虽然有一些脚本可以做到这一点,但它们已经过时了,所以我想自己写一个新的。

我现在遇到的主要问题是,如何让IPython在后台监听网络连接(也就是说,使用不同的线程,其他解决方案也可以),并在主线程中执行接收到的命令。之前的脚本没有在主线程中执行命令,这样会导致像matplotlib这样的程序经常崩溃。

我看到twisted提供了一个ThreadedSelectReactor,但我不知道如何将它与IPython正确结合使用。

更新

举个例子:

假设你打开了两个窗口,一个是运行IPython的终端,另一个是你在Vim中编辑Python脚本的窗口。你在Vim中选中一行代码,然后按下C-Enter,Vim就会把这一行发送给IPython实例,IPython执行这行代码并在终端中打印结果,就像你自己复制粘贴了一样。

(使用Matlab的人都知道这个功能有多实用。)

2 个回答

1

我感觉IPython现在使用或者已经转向使用zmq作为消息传递的协议。至少在我运行0.11版本的时候,zmq的支持是可用的。

使用zmq(零消息队列),整个消息传递的问题就大大简化了,让你的Vim实例通过zmq进行通信应该不是很难(zmq可以在很多不同的平台上使用)。

可以看看这个博客:http://ipythonzmq.blogspot.com/,还有当然:http://www.zeromq.org/

1

几个月前,Paul Ivanov 用 IPython 的 zmq 接口做了这个。这个项目叫做 vim-ipython

撰写回答