我正在运行 python 7.0.1 一切似乎都很好,但在第一次导入后,我一直得到一个奇怪的符号(见附件截图)。 当我再次按 Enter 时,符号消失并且不再出现。 我在 mac 上的 iterm2 终端上使用鱼壳。
[更新]
将 prompt_toolkit 升级到 2.0.6 应该可以解决这个问题。
嗯,我见过这个,但是^[[43;1R
,但我认为这是因为我是我的终端模拟器的主人。 不知道这是从哪里来的
我在最新的https://github.com/jonathanslenders/pymux (未发布,使用 prompt-toolkit 2)中看到了类似的东西。 也许@jonathanslenders有一些想法?
我得到相同的:
$ ipython
Python 3.6.5 (default, Mar 30 2018, 06:41:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import os
^[[19;1RIn [2]:
如果我然后尝试选项卡完成:
In [2]: os.p
os.pardir os.pathconf os.pathsep os.popen os.putenv
os.path os.pathconf_names os.pipe os.pread os.pwrite
^[[19;1RIn [2]: os.p
这使得选项卡完成几乎无法使用。
是否有可能通过以下提交修复: https :
它已合并到 prompt_toolkit master 中,但我即将发布包含它的新 prompt_toolkit 2.0。
我从 master 安装了prompt-toolkit
并且问题似乎仍然存在,但我不确定在 ipython 方面是否需要做其他事情。
不,我很确定这不是 IPython。 我会尝试用 iterm2 重现
我确定我不理解这里的复杂性,但仅供参考,这确实发生在 IPython 7.0 和 7.1 中,并且不会发生在 6.0 或 6.5 中,在同一个 virtualenv 中进行测试。
你们都可以发布你在哪个终端看到的吗?
我可以在 iTerm2 – 3.2.1beta6 – osx 上重现; alacritty v0.2.0-35-ga53cabf osx,但不是在裸 Macos terminal.app (sierra 10.12.6) 上
终端的广告功能与它们实际可以做什么之间是否不匹配?
它也不能用ipython --colors=nocolor
重现(对我来说)
在 High Sierra 10.13.6 上只是裸 Terminal.app。 nocolor
不适合我。
它也不能用
ipython --colors=nocolor
重现(对我来说)
从头开始,它似乎是随机的,但确实,nocolor 没有修复它。
你们可以尝试删除这个patch_stdout
上下文管理器吗?
如果我删除它,它_似乎_对我来说很好,如果我额外刷新标准输出,我会遇到两次问题..
删除上下文管理器似乎为我解决了这个问题。
我在 macOS Terminal.app 和 iTerm2 中都会发生这种情况。 然而,这个角色在 iTerm2 3.2.1beta 中出现得相当一致。 今天早上我升级到 3.2.2beta1,现在这个字符似乎出现并立即消失,取而代之的是正常的 iPython 提示。 但至少在一种情况下,角色一直很执着,我不确定有什么不同。
是的,也帮我修好了。 效果对我来说总是一致的。
@jonathanslenders可能是补丁标准输出有竞争条件,标准输出/错误被恢复,并在刷新发生之前开始写入?
patch_stdout 的raw
参数在 ptk 代码中似乎也无处可去。
所以有理由这样做,否则在后台线程中打印会弄乱渲染,但它看起来(对我来说),这是刷新捕获的 stderr/out 和恢复到它们的初始值之间的竞争条件。
不确定您是否对错误进行了本地化或仍在试验中,但仅供参考:
^[[41;1R
(导入,表达式,甚至空行)Python 3.7.0 (default, Sep 18 2018, 18:47:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
^[[41;1RIn [1]:
我也非常频繁地得到这个(macOS 10.11.6,iTerm 3.2.0beta5),尽管不是 100% 的时间,并且使用43;1R
序列。
Python 3.7.0 (default, Jun 29 2018, 20:13:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import sqlalchemy
^[[43;1RIn [2]:
是的,这个真的杀了我。 我会降级,但这会破坏 Jupyter 笔记本。 对我来说,制表符补全或多或少完全被破坏了,因为这些字符出现得非常频繁。
遗憾的是 readline 目前不是一个选项: https :
运行prompt_toolkit
当前主节点(版本 2.0.5)没有变化。
我可以重现它。
iTerm2 build 3.2.3(我认为是最新的)、IPython 7.0.1、Python 3.6.1。
我在 Ubuntu 上有 Python 3.6.3 的错误,它在 Python 3.7 中消失了,尽管我可以看到一些小故障(比如字符被打印出来然后被快速删除)。
我在这里有一个修复: https :
实际上,您在此提交中看到的是两个单独的修复程序,它们都可以解决问题(对于我可以重现的内容)。
出于某种原因,就在接受第一个输入之前,捕获了一个空字符串并将其写入标准输出。 这触发了 patch_stdout 代码。 其实,没有必要把提示删掉,再画一遍,打印一个空字符串就行了。 (我仍然需要检查为什么会发生这种情况。)
真正的解决方法是在呈现捕获的内容之前等待 CPR 响应。 CPR 异步工作。 我们通过向 stdout 写入一些内容来请求光标位置,然后我们在 stdin 上接收来自终端的响应。 总是有一点延迟。 但重要的是将终端保持在 RAW 模式并读取此输入,直到此响应到达。 我们没有这样做,它使用光标位置呈现终端自己的响应。
终端之间的时间应该略有不同,但我想这应该可以。
你们都可以尝试使用最新的 prompt_toolkit 提交吗? 如果有效,我会推送一个新版本。
这修复了我这边的错误。 谢谢@jonathanslenders !
是的,非常感谢,最新的大师也为我修复了它。
该补丁修复了我也遇到的一些[[39;1R
字符。 谢谢!
编辑:从头开始。 我正在测试错误的版本。 是的,这似乎也为我解决了这个问题。
不,这似乎不能解决我的问题。 相反,我得到了一个不同的角色
AlbireoProˇalbireo: Downloads » ipython (3.7.0 2.7.15)
In [1]: from can.interfaces.slcan import slcanBus
^[[21;1RIn [2]:
你们都可以尝试使用最新的 prompt_toolkit 提交吗? 如果有效,我会推送一个新版本。
为我工作。 您还更改了颜色的处理 AFAICT,我们不情愿地在 IPython 的某些地方依赖 ansi 映射到 ansi 代码,我也会解决这个问题。 谢谢 !
@Carreau :我刚刚推送了 prompt_toolkit 2.0.6。
IPython 是否希望某些 RRGGBB 序列映射到某些 ANSI 颜色,即使在 256color 模式下?
顺便说一句@Carreau ,现在
预计
我不会说“期望”,但主题似乎混合了#ansixxx
和#00ff00
,它们看起来很好,并且与 2.0.6 的差异更大一些。
我认为我们只需要更多的一致性来决定我们是使用#ansi
还是#hex
。
我会在某个时候查看亮度选项。 几周前我刚刚开始了一个新的职位,开发 IPython/jupyter 本身的时间更少了。
有趣,但它是有道理的。 当颜色定义为 #00ff00 时,我会查看 256 色调色板中最接近的颜色,但我排除了 16 种 ansi 颜色。 这意味着它从剩余的 240 种颜色中取最接近的。
原因是现在人们经常为 ANSI 颜色定义自定义配色方案 - 而不是为剩余的 240 种颜色定义。 因此,虽然在您的情况下它可能有点偏差,但实际上它可能更接近其他人的真实颜色。
以下是如何在不同终端中呈现基本 ANSI 颜色的示例:
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
上游固定关闭