4

我正在尝试通过使用 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现在运行良好。但是我失去了交互式行编辑功能。

有什么建议或解决方法吗?

4

1 回答 1

2

您可以尝试在单独的线程中使用 raw_input,然后将结果返回到全局变量。不确定这是否对你有用,它对我有用,但在完全不同的情况下

于 2013-08-10T23:57:08.647 回答