【问题标题】:SublimeREPL: How can I automatically close (or restart) the previous console when rebuilding?SublimeREPL:重建时如何自动关闭(或重新启动)以前的控制台?
【发布时间】:2018-05-24 05:52:16
【问题描述】:
【问题讨论】:
标签:
python
sublimetext3
sublimerepl
【解决方案1】:
我做了一个肮脏的解决方法,它以某种方式起作用。我编辑了sublimerepl.py 喜欢:
if view.name() == view_id:
found = view
old_rv = self.repl_view(found)
if old_rv:
old_rv.on_close()
window.focus_view(found)
break
我还更改了 on_close 函数
self.repl.close()
到
self.repl.kill()
现在,Python 实例的数量保持不变。
仍有一些不一致之处。当我使用此代码与 Arduino 对话时,我会每隔一段时间收到一个PermissionError。添加time.sleep(1) 并没有改变这一点。我愿意接受建议。
编辑:使用我的“解决方案”一段时间后,每次执行代码时都会出现***Repl Killed***,这让我很恼火。因此,我决定关闭当前的 REPL 视图并开始一个新的视图。这样,我就不会得到不必要的选项卡,后台 Python shell 会关闭,并且每次执行代码时都会开始一个全新的视图。 sublimerepl.py 的新代码是:
for view in window.views():
if view.name() == view_id:
view.close()
break
view = window.new_file()
由于某种原因,close() 仍然必须替换为 kill()。
【解决方案2】:
受@Not_a_programmer 帖子的启发,我做了一些稍微不同的修改。
在 sublimerepl.py (Windows 10) 文件 C:\Users\User\AppData\Roaming\Sublime Text 3\Packages\SublimeREPL
搜索并更改下面的代码:
if view.name() == view_id:
found = view
old_rv = self.repl_view(found)
if old_rv:
old_rv.on_close()
#window.focus_view(found)
break
我评论了这个通常默认的功能,它将 sublimes 视图集中在新打开的 repl 上。接下来由于某种原因有必要像这样更改“on_close”功能:
def on_close(self):
self.repl.kill()
for fun in self.call_on_close:
fun(self)
这在大多数情况下都可以解决问题,但我在 repl 输出中遇到了问题,其中运行新 repl 时“REPL KILLED”文本有时会破坏输出,所以在同一个文件中,我注释掉了这一行:
# self.write("\n***Repl Killed***\n""" if self.repl._killed else "\n***Repl Closed***\n""")
这在运行新进程之前有效地结束了 repl 进程,并且至少可以方便地防止 Python 超出我的任务管理器。