使用gevent进行行编辑的非阻塞raw_input

我正在尝试在使用gevent的内部API上实现交互式
shell.我希望背景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现在运行正常.但是我失去了交互式的行编辑功能.

有任何建议或解决方法吗?

最佳答案 您可以尝试在seprecate线程中使用raw_input,然后将结果返回到全局变量.不确定这是否适合你,它对我有用,但在完全不同的情况下

点赞