2

我正在使用 python 的 gevent 库,并且不希望raw_input(或者更具体地说是 cmd.Cmd 中的事件循环)在等待用户输入时阻塞。因此,我使用它gevent.monkey.patch_sys()来确保我的其他 greenlets 在等待用户输入时可以运行。效果很好,只是它似乎与readline.

例如,我在 ipython 的 ipdb 调试器中不再有历史记录和自动完成功能,因为箭头键不再起作用。这可以通过这个简单的片段看到:

from gevent import monkey
monkey.patch_sys()

import ipdb; ipdb.set_trace()
# now hit arrow keys at the prompt

我得到以下信息:

ipdb> ^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A
*** SyntaxError: invalid syntax (<stdin>, line 1)

我已经将其追溯到我认为 python 的 readline 可能存在的问题,因为我知道 ipython 依赖于它。

这似乎是一个类似的情况:

https://github.com/gevent/gevent/issues/6

但就我而言,我想在调试器中专门使用自动完成和历史记录。

我在 iterm 中的 OSX 上运行。这是特定于控制台设置的东西吗?还是补丁中的某些东西从根本上破坏了readline

关于如何解决的任何想法?

4

0 回答 0