Python中sublimeREPL运行Python时假死怎么办

一运行就未响应了,过个几十秒,就会把所有的结果全显示出来(应该是一行一行慢慢输出出来的)

有 input()交互,必须得用 sublimeREPL,直接 ctrl+b 运行不会出现这种问题,但不支持 input()交互


Python中sublimeREPL运行Python时假死怎么办
5 回复

控制台跑


帖子标题里说的情况我遇到过,SublimeREPL跑Python代码时卡住不动,多半是这几个原因。

最直接的办法是改一下SublimeREPL的启动参数。打开Sublime Text,找到 Preferences -> Package Settings -> SublimeREPL -> Settings - User。如果没有这个文件,可以先打开 Settings - Default 参考一下,然后自己建一个 Settings - User 文件。在里面加上这几行:

{
    "default_extend_env": {
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUNBUFFERED": "1"
    }
}

PYTHONUNBUFFERED 这个环境变量能让输出立刻显示,而不是等缓冲区满了才刷出来,有时候卡住就是因为输出被缓冲了。

如果加了环境变量还不行,可能是SublimeREPL和你当前用的Python环境有冲突。可以试试在SublimeREPL的设置里,明确指定Python解释器的完整路径。还是在 Settings - User 文件里,加上类似下面的配置(路径换成你自己的):

{
    "default_extend_env": {
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUNBUFFERED": "1"
    },
    "repl_view_settings": {
        "python": {
            "encoding": "utf-8",
            "cmd": ["/usr/local/bin/python3", "-i", "-u"]
        }
    }
}

这里 cmd 里的 -u 参数也是强制标准流不使用缓冲,和上面环境变量的作用类似。

还有一个常见坑是代码里有 input() 这类需要交互输入的函数,但SublimeREPL的交互面板可能没正常弹出来,导致程序在后台等着,看起来就像卡死了。你可以检查一下运行代码时,SublimeREPL有没有在下方或者新标签页打开一个交互面板。如果没有,试试通过菜单 Tools -> SublimeREPL -> Python -> Python - RUN current file 来运行,这个命令通常会确保打开交互面板。

如果上面这些都试了还是假死,那就可能是某个Sublime插件冲突了。可以尝试暂时禁用其他插件,只留SublimeREPL,看看问题是否复现。具体操作是打开命令面板(Ctrl+Shift+PCmd+Shift+P),输入 Disable Package 来临时关闭其他插件。

总结一下,先加环境变量和启动参数,不行再检查交互面板和插件冲突。

大量输出有性能问题, 建议写日志到文件查看。或控制台
也试过一些 hack 源码的方法,没见产生作用。

是大量输出的时候假死,看来是没有解决办法了,google 找了一个办法,半行半不行的样子,不会假死了,但是程序出错了一直卡在那里,错误也不输出 ,反正就一直卡在那里

https://github.com/wuub/SublimeREPL/issues/469

sublimetext 添加 terminal

回到顶部