我正在尝试通过使用 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现在运行良好。但是我失去了交互式行编辑功能。
有什么建议或解决方法吗?