Python 3.x 使用sys.stdin获取用户输入数据

Python 3.x 使用sys.stdin获取用户输入数据,python-3.x,stdin,Python 3.x,Stdin,我没有使用.read()或.readline() 但是这段代码可以读取数据。它逐行读取数据。输入数据由'\n'分隔。数据由用户键入。比如“input()” 我的问题: .read()或.readline()不是必需的吗 我想知道为什么for循环在sys.stdin上工作,以及它是如何逐行读取数据的 如果查看,您将看到sys.stdin(和sys.stdout/sys.stderr)只是文件对象 这些流是常规文本文件,类似于open()函数返回的文本文件 说: open()函数返回的文件对象类型取

我没有使用
.read()
.readline()
但是这段代码可以读取数据。它逐行读取数据。输入数据由
'\n'
分隔。数据由用户键入。比如“input()”

我的问题:
  • .read()
    .readline()
    不是必需的吗
  • 我想知道为什么
    for
    循环在
    sys.stdin
    上工作,以及它是如何逐行读取数据的
  • 如果查看,您将看到
    sys.stdin
    (和
    sys.stdout
    /
    sys.stderr
    )只是文件对象

    这些流是常规文本文件,类似于
    open()
    函数返回的文本文件

    说:

    open()
    函数返回的文件对象类型取决于模式。当使用
    open()
    以文本模式(“w”、“r”、“wt”、“rt”等)打开文件时,它返回
    io.TextIOBase
    (特别是
    io.TextIOWrapper
    )的子类

    TextIOWrapper
    继承自
    IOBase
    ,它有一个
    \uuuu iter\uuuu
    方法。此
    \uuu iter\uu
    方法允许在文件中的行上循环。我在Python文档中找不到这一点,但已经给出了

    IOBase(及其子类)支持迭代器协议,这意味着可以对IOBase对象进行迭代,从而生成流中的行

    import sys
    
    data = []
    for line in sys.stdin:
        data.append(line)