问题描述
确定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
中隐式提取结果,但仅单行,它不会等到关闭为止。否则,您将无法手动删除换行符。