1

我有一个小型 GTK python 应用程序,它导入了一个可能不会被加载两次的包(Twisted)。

如果我使用 python-mode.el 在 emacs 中运行我的应用程序并按 Cc Cc,则应用程序将在 python shell 窗口中执行。如果我现在关闭应用程序,python shell 将保持启动并运行。如果我现在再次按 Cc Cc,emacs 会“重用”旧的 python 进程,因此我遇到了问题,因为我安装了两次 Twisted reactor。

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

4

2 回答 2

2

python-mode.el comes with a command py-execute-buffer-dedicated, opening a new and reserved process for it

于 2012-07-22T17:32:31.097 回答
1

在中,如果变量设置为 ,python.el则在新缓冲区中启动新的劣质进程。因此,可以建议函数在每次调用后将该变量重置为,从而强制为每个后续命令执行一个新的 Python 进程。像下面这样的东西应该可以工作:python-buffernilpython-send-buffernilpython-send-buffer

(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 进程。我发现了一个邮件列表帖子,其中用户提供了一个临时功能,似乎可以满足您的需求。

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

于 2012-06-18T17:53:29.233 回答