如何在 Python 中读取 stdin 中的输入内容

  1. 在 Python 中使用 fileinput.input() 来读取 stdin
  2. 在 Python 中使用 sys.stdin 来读取 stdin
  3. 结论

本教程讨论了在 Python 中从 stdin 读取输入的方法。可以直接从控制台读取,也可以从控制台中指定的文件名读取。

在 Python 中使用 fileinput.input() 来读取 stdin

我们可以在 Python 中使用 fileinput 模块来读取 stdinfileinput.input() 读取命令行参数中指定的输入文件名的所有行。如果没有指定参数,它将读取提供的标准输入。

下面的例子说明了如何从指定的输入文件名中读取。

我们将使用下面的 sample.txt

Hello
Line1

Line2

下面是脚本 read.py

import fileinput

for line in fileinput.input():
    print(line.rstrip())

我们这样执行它。

python read.py "sample.txt"

输出:

Hello
Line1

Line2

下面的例子说明了从标准输入中读取数据。

import fileinput

for line in fileinput.input():
    print('Output:', line.rstrip())

执行和输出如下所示。

python read.py
Line 1
Output: Line 1
Line 2
Output: Line2
^Z

Python 从 stdin 读取输入

我们可以保存数据以便以后处理,如下所示:

import fileinput

data = []
for line in fileinput.input():
    data.append(line.rstrip())

注意,我们使用了 line.rstrip(). 就是删除后面的换行。

输入 y 会删除所有的变量。

在 Python 中使用 sys.stdin 来读取 stdin

另一种方法是使用 sys.stdin 来读取 Python 中的 stdin。下面的例子说明了从 stdin 逐行读取数据。

import sys 
for line in sys.stdin: 
    print('Output:', line.rstrip())

执行和输出如下所示。

python read.py
Line 1
Output: Line 1
Line 2
Output: Line2
^Z

我们也可以一次性从 stdin 中读取所有数据,而不必逐行读取。

下面的例子说明了这一点。

import sys 

data = sys.stdin.readlines()
data = [line.rstrip() for line in data]

注意我们使用了 line.rstrip()。这是为了删除尾部的换行符。

结论

我们讨论了 Python 中读取 stdin 输入的两种方法,fileinput.input()sys.stdinfileinput.input() 可以从命令行参数中指定的文件名或标准输入中读取数据,而 sys.stdin 只能从标准输入中读取数据。

comments powered by Disqus