sys.stdin 什么时候等待输入?

When does sys.stdin await input?

决定sys.stdin是否等待用户输入的规则是什么?例如:

>>> sys.stdin
# <_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>
>>> "".join(sys.stdin)
# <awaiting input...>

即使我没有“调用”sys.stdin 或其他任何东西,第二行仍在等待输入,那么 python 是如何知道的以及等待时的规则是什么?

最后,是否可以输入 sys.stdin 而没有尾随 \n ?例如:

>>> "".join(sys.stdin)
hello
'hello\n'

要退出,我必须执行 Returnctrl-d。我可以在没有 \n 的情况下获得输入吗?所以我只需要在最后做一个 rstrip() 或类似的东西?

第二个用例是利用文件对象是迭代器这一事实;它一遍又一遍地隐式调用 sys.stdin__next__ 方法,直到引发 StopIteration。因为它运行到完成,而不仅仅是一行,所以它不会 return 直到 sys.stdin 关闭(通常由另一侧)。所以答案就是你想的那样,你只是没有意识到调用迭代器协议算作一种“调用”的形式。

如果您只想要一个 输入,末尾没有换行符,只需使用 the input function (隐式地从 sys.stdin,但只有一行,它不会等到关闭)。否则,您将无法手动删除换行符。