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
,但只有一行,它不会等到关闭)。否则,您将无法手动删除换行符。
决定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
,但只有一行,它不会等到关闭)。否则,您将无法手动删除换行符。