【发布时间】:2013-07-03 17:09:23
【问题描述】:
我正在尝试通过使用 gevent 的内部 API 实现交互式外壳。我希望后台 greenlets 在等待用户输入的同时继续运行,并且我还希望 readline 命令行功能(历史记录、行编辑等)
我的问题似乎是 raw_input 阻塞了。有一些解决方案可以将 raw_input 替换为以下内容:
def raw_input(prompt):
sys.stdout.write(prompt)
sys.stdout.flush()
select.select([sys.stdin], [], [])
return sys.stdin.readline().rstrip('\n')
这解决了阻塞问题;背景greenlets现在运行良好。但是我失去了交互式行编辑功能。
有什么建议或解决方法吗?
【问题讨论】:
-
我没有一个可靠的答案,但希望能找到一个正确的方向:您尝试过
cmd模块吗?或者,您是否尝试将readline模块合并到您对raw_input()的重新定义中?我对后一种情况并不乐观,因为与实际的 C 库相比,readline模块感觉相当残废,但值得一试。 -
嗯,cmd 看起来很有希望,但默认情况下它使用 raw_input,所以它会阻塞。你可以将use_rawinput设置为false,但它不仅仍然阻塞,而且你也失去了行编辑!
标签: python python-2.7 io gevent