sys.stdin读什么?

Vim*_*mzy 6 python stdin file sys

我学会了如何打开文件,然后使用Python的预先构建的函数.但是sys.stdin是如何工作的?

for something in sys.stdin:
    some stuff here

lines = sys.stdin.readlines()
Run Code Online (Sandbox Code Playgroud)

sys.stdin上面两个不同用途之间有什么区别?从哪里读取信息?是通过键盘,还是我们还要提供文件?

cda*_*rke 11

所以你使用了Python的"预先构建的函数",大概是这样的:

file_object = open('filename')
for something in file_object:
    some stuff here
Run Code Online (Sandbox Code Playgroud)

这通过调用文件对象上的迭代器来读取文件,该迭代器恰好返回文件中的下一行.

你可以改用:

file_object = open('filename')
lines = file_object.readlines()
Run Code Online (Sandbox Code Playgroud)

它将当前文件位置的行读入列表.

现在,sys.stdin它只是另一个文件对象,它恰好在程序启动之前由Python打开.你使用该文件对象做什么取决于你,但它与任何其他文件对象没有任何不同,只是你不需要open.

for something in sys.stdin:
    some stuff here
Run Code Online (Sandbox Code Playgroud)

将遍历标准输入,直到达到文件结尾.这样:

lines = sys.stdin.readlines()
Run Code Online (Sandbox Code Playgroud)

您的第一个问题是关于使用文件对象的不同方式.

第二,从哪里读?它从文件描述符0(零)读取.在Windows上,它是文件句柄0(零).文件描述符/句柄0默认连接到控制台或tty,因此它实际上是从键盘读取.但是它可以通过shell(如bash或cmd.exe)重定向,使用如下语法:

myprog.py < input_file.txt 
Run Code Online (Sandbox Code Playgroud)

这会将文件描述符零更改为读取文件而不是键盘.在UNIX或Linux上,它使用底层调用dup2().阅读您的shell文档以获取有关重定向的更多信息(或者man dup2如果您是勇敢的话).

  • 在python 3中,文本流。 (2认同)

Bur*_*lid 7

它从标准输入中读取——它应该由键盘以流数据的形式提供。

不需要提供文件,但是您可以使用重定向将文件用作标准输入。

在 Python 中,该readlines()方法读取整个流,然后在换行符处将其拆分并创建每一行的列表。

lines = sys.stdin.readlines()
Run Code Online (Sandbox Code Playgroud)

上面创建了一个名为 lines 的列表,其中每个元素都是一行(由行尾字符确定)。

您可以在 Python 教程的输入和输出部分阅读有关此内容的更多信息。

如果要提示用户输入,请使用该input()方法(在 Python 2 中,使用raw_input()):

user_input = input('Please enter something: ')
print('You entered: {}'.format(user_input))
Run Code Online (Sandbox Code Playgroud)


And*_*der 7

要了解 sys.stdin 的工作原理,请执行以下操作:

创建一个简单的 python 脚本,我们将其命名为“readStdin.py”:

import sys
lines = sys.stdin.readlines()
print (lines)
Run Code Online (Sandbox Code Playgroud)

现在打开控制台任意类型:

echo "line1 line2 line3" | python readStdin.py
Run Code Online (Sandbox Code Playgroud)

该脚本输出:

['"line1 line2 line3" \n']
Run Code Online (Sandbox Code Playgroud)

因此,脚本已将输入读取到列表(名为“lines”)中,包括由“echo”生成的新行字符。那是。