Python sys.stdin属性

sys 模块提供了几个有助于与 Python 解释器交互的方法,以及由解释器维护和使用的各种变量。这个模块有一个属性sys.stdin ,它是一个文件对象,就像 Python 中的其他文件对象一样。

唯一不同的是,sys.stdin 在程序开始之前就被Python自动打开,而其他文件对象则在需要时由程序员打开。sys.stdin 与命令行或TTY (TeleTYpe)相连,并从中读取用户输入。

在内部,它连接到文件描述符0 。在Windows机器上,它是文件处理程序0

由于它需要一些数据源,而默认情况下,终端是数据源,我们也可以改变它,重定向到从一个文本文件中读取数据。

在Python编程语言中,内置的input() 方法主要用于接受用户输入,也在幕后使用sys.stdin

Pythonsys.stdin 属性的语法

for line in sys.stdin:
    # do something with the input [line]

通过这种语法,for 循环无限期地执行,等待用户的输入。在处理完信息后,它又再次回到了等待状态。

因此,开发者必须包括一个策略,在不破坏应用程序的情况下终止循环。我们将在本文中讨论两种方法。

参数

由于sys.stdin 是一个文件对象,它不接受任何参数。

返回

由于sys.stdin 是一个文件对象,它不返回任何东西。它是一个文件对象,我们可以用它来读取来自用户或文件的命令行输入。

例1:使用sys.stdin 从命令行读取数据

import sys
print("Enter your favorite subjects:")
try:
    for line in sys.stdin:
        print(line)
except KeyboardInterrupt:
    print("Program terminated using (Ctrl + C)!")

输出:

Enter your favorite subjects:
Computer Science
Computer Science
Psychology
Psychology
History
History
Mathematics
Mathematics
Program terminated using (Ctrl + C)!

上面的Python代码无限期地执行并处理用户输入,直到使用键盘中断停止执行。

我们可以用Ctrl+ C引发一个按键中断。上面的代码使用了tryexcept 块。

有时,使用tryexcept 块会受到批评,因为它们会使代码库变得臃肿,影响可读性。

此外,这些块是用来捕捉异常的,并期望在不破坏应用程序的情况下得到很好的处理,这在很多情况下并不是小菜一碟。因此,开发人员使用一种方法,将一个独特的关键词或文本与一些特定的任务联系起来。

每当程序遇到这个特殊的关键词,就会发生一些独特的事情,在我们的例子中,就是终止无限循环。请参考下面的代码来理解这种方法。

import sys
print("Enter your favorite subjects:")
for line in sys.stdin:
    if line.strip().lower() == "exit":
        print("Program terminated using a special text or keyword!")
        break
    else:
        print(line)

输出:

Enter your favorite subjects:
Computer Science
Computer Science
Psychology
Psychology
History
History
Mathematics
Mathematics
EXIT
Program terminated using a special text or keyword!

在上面的Python代码中,我们把字符串"exit" 与无限循环的终止联系起来。如果用户输入"exit" ,程序将终止。

注意,我们确实对输入进行了一些清理,以验证它是否是一个终止关键字。strip() 删除了所有前导和结尾的空格,lower() 将字符串转换为小写。

如果输入的内容与字符串"exit" 匹配,break 指令就会执行并终止无限循环和程序。

例2:使用sys.stdin ,从文本文件中读取数据

要从一个文本文件中读取数据,创建一个文件,data.txt ,并添加以下内容。

Computer Science
Psychology
History
Mathematics
EXIT

将该文件和即将到来的 Python 代码保存在main.py 中。注意,我们可以使用任何名字来命名文件。

接下来,为了使用这个文件来读取输入,我们必须使用下面的终端命令来执行Python脚本。

python main.py < data.txt

这个命令告诉Python解释器使用data.txt 作为Python脚本的用户输入main.py

import sys
print("Enter your favorite subjects:")
for line in sys.stdin:
    if line.strip().lower() == "exit":
        print("Program terminated using a special text or keyword!")
        break
    else:
        print(line, end = "")

输出:

Enter your favorite subjects:
Computer Science
Psychology
History
Mathematics
Program terminated using a special text or keyword!

每次从文本文件中读取并处理一个单行。当脚本遇到字符串EXIT ,就会终止循环和程序。

我们也可以一次性读取所有的数据,并将其存储在一个字符串的列表中。sys.stdin.readlines() 方法让我们一次性读取所有的输入,并返回一个字符串的列表。

请参考下面的Python代码来理解这种方法。

import sys
data = sys.stdin.readlines()
print(data)
for line in data:
    print(line)

输出:

[
    'Computer Sciencen',
    'Psychologyn',
    'Historyn',
    'Mathematicsn',
    'EXIT'
]
Computer Science
Psychology
History
Mathematics
EXIT