我正在使用python的gevent库,并且在等待用户输入时不希望raw_input
(或更具体地说,cmd.Cmd中的事件循环)阻塞。因此,我使用gevent.monkey.patch_sys()
来确保在等待用户输入时我的其他greenlet可能会运行。效果很好,除了它似乎与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
?
有关如何解决的任何想法?