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引发一个按键中断。上面的代码使用了try
和except
块。
有时,使用try
和except
块会受到批评,因为它们会使代码库变得臃肿,影响可读性。
此外,这些块是用来捕捉异常的,并期望在不破坏应用程序的情况下得到很好的处理,这在很多情况下并不是小菜一碟。因此,开发人员使用一种方法,将一个独特的关键词或文本与一些特定的任务联系起来。
每当程序遇到这个特殊的关键词,就会发生一些独特的事情,在我们的例子中,就是终止无限循环。请参考下面的代码来理解这种方法。
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