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'

退出,我必须做 Return ctrl-d 。我可以不用\n来获得输入吗?还是只需要在末尾总是执行rstrip()

解决方法

第二个用例是使用文件对象是迭代器的事实;它会隐式地反复调用sys.stdin的{​​{1}}方法,直到引发__next__为止。由于它运行完成,而不仅仅是一行,因此直到StopIteration关闭(通常在另一侧)后,它才返回。因此答案就是您的想法,您只是没有意识到调用迭代器协议算作“调用”的形式。

如果您只想输入一个 line 输入,而末尾没有换行符,则只需使用the input function(这会从sys.stdin中隐式提取结果,但仅单行,它不会等到关闭为止。否则,您将无法手动删除换行符。