os.read(0,) 与 python 中的 sys.stdin.buffer.read()

os.read(0,) vs sys.stdin.buffer.read() in python

我遇到了 picotui 库,很想知道它是如何工作的。

我看到 here(第 147 行)它使用:

os.read(0,32)

根据 Google 0 表示 stdin,而且从标准输入读取的公认答案是通过

sys.stdin.buffer.read()

我想知道两者之间有什么区别。哪个更快?哪个版本更便携?

使用os.read(0, 32)无缓冲读取,直接调用OS级系统调用并且只读取非常特定数量的数据(使用公司保证个人电话不会阅读更多)。有时——例如,如果您要将标准输入移交给另一个程序并让 读取剩余的待处理数据——您特别需要它。

sys.stdin.buffer.read() 是一种 缓冲 ​​ 读取(并且,在不指定长度的情况下,读取尽可能多的数据)。缓冲读取可能会读取您立即请求的更多数据(即使它只是 returns 请求的数量,将其余数据保存在缓冲区中以用于处理未来请求),以减少系统调用的数量,从而在读取大量数据时以较低的上下文切换开销运行(特别是,当您进行大量短读时,缓冲减少了用户态和用户态之间的往返次数OS 内核)。

其中哪一个是合适的在很大程度上取决于实现和运行时环境的细节,而询问哪个适合给定场景的问题需要包括更多细节,以免过于宽泛。 重要的是不要混用;在缓冲读取之后执行非缓冲读取可能会产生不可预测的结果,因为无法知道 OS 已经读取了多少数据来填充读取缓冲区中尚未使用的部分。