我有一个小的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窗口吗?
答案 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
语句没有效果(为此,一个显式需要reload
或execfile()
)。如果我在这里完全偏离基地,我道歉,但我觉得这种可能性值得一提。