Python 3中的非阻塞输入

nic*_*b96 6 stdin input nonblocking python-3.x

我想要一种跨平台的方式以非阻塞方式从stdin读取输入。

这样的事情(无阻塞套接字就是这样做的):

while True
    try:
        string = input("> ")
    except BlockingIOError:
        pass
    else:
        print(f"you typed {string}")
Run Code Online (Sandbox Code Playgroud)

我不是在问原始模式与熟模式。熟模式是默认的行为,行缓冲标准输入,原始模式使字符在输入时可用于输入流。

我想要的是一种从平台上读取stdin的独立于平台的方式,如果还没有要读取的数据,则不阻止它。同样,我不必担心必须按Enter键才能将字符提供给流。我只是不希望stdin中没有任何内容时该程序完全停止。

我也会对异步方法感到满意。或者像上面的例子那样抛出BlockingIOError的东西。或类似Java的Scanner.hasNextLine()之类的东西,它返回一个布尔值,表示stdin是否具有要读取的数据。

我不希望使用诸如线程或子流程之类的笨重解决方案。