在python-mode.el中的C-c C-c上打开新的python shell

时间:2012-06-16 20:11:20

标签: emacs python-mode

我有一个小的GTK python应用程序导入一个可能无法加载两次的包(Twisted)。

如果我使用python-mode.el在emacs中运行我的应用程序并按下C-c C-c,则应用程序将在python shell窗口中执行。 如果我现在关闭应用程序,python shell将保持运行状态。如果我现在再次按C-c C-c,emacs"重新使用"旧的python进程,因此我遇到了问题因为我安装了Twisted反应器两次。

每次执行缓冲区时都可以让python-mode.el打开一个新的shell窗口吗?

2 个答案:

答案 0 :(得分:2)

python-mode.el附带命令py-execute-buffer-dedicated,  为它打开一个新的和保留的过程

答案 1 :(得分:1)

python.el中,如果python-buffer变量设置为nil,则会在新缓冲区中启动新的劣质流程。因此,可以建议python-send-buffer函数在每次调用后将该变量重置为nil,从而强制为每个后续python-send-buffer命令执行新的Python进程。以下内容应该有效:

(defadvice
  python-send-buffer
  (after python-send-buffer-new-proc activate)
  (setq python-buffer nil))

(ad-activate python-send-buffer)

我知道您的帖子正在向python-mode.el寻求帮助,但我认为无论如何都要提一下这一点,因为如果python-mode.el没有使用类似的机制,我会感到惊讶。如果我有时间,我会试着调查一下。

编辑:python-mode.el包使用命令py-shell启动新的劣质Python进程。我发现a mailing list posting用户提供的 ad hoc 功能似乎可以满足您的需求。

顺便说一下,考虑尝试改变python-mode的默认行为并不是解决这个问题的最佳方法。我不知道你的代码是做什么的,而且我对Twisted并不是特别熟悉,但在我看来,在同一会话中第二次评估代码时遇到重大错误可能是更基本的设计问题的一个标志。我没有看到如何将同一模块的多个imports作为问题,因为Python模块只加载一次,连续的import语句没有效果(为此,一个显式需要reloadexecfile())。如果我在这里完全偏离基地,我道歉,但我觉得这种可能性值得一提。