首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sys.stdin读什么?

sys.stdin读什么?
EN

Stack Overflow用户
提问于 2015-04-05 05:20:05
回答 5查看 146.5K关注 0票数 32

我了解了如何打开文件,然后将Python的预内置函数与它们一起使用。但是sys.stdin是如何工作的呢?

代码语言:javascript
运行
复制
for something in sys.stdin:
    some stuff here

lines = sys.stdin.readlines()

以上两种不同用途在sys.stdin上的区别是什么?它在哪里读取信息?它是通过键盘,还是我们仍然需要提供一个文件?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-04-05 08:37:01

因此,您已经使用了Python的“预内置函数”,大概如下所示:

代码语言:javascript
运行
复制
file_object = open('filename')
for something in file_object:
    some stuff here

它通过调用文件对象上的迭代器来读取文件,而文件对象恰好从文件返回下一行。

相反,您可以使用:

代码语言:javascript
运行
复制
file_object = open('filename')
lines = file_object.readlines()

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

现在,sys.stdin只是另一个文件对象,它恰好是在程序启动之前由Python打开的。您如何处理该文件对象取决于您自己,但它与任何其他文件对象并没有什么不同,只是您不需要一个open

代码语言:javascript
运行
复制
for something in sys.stdin:
    some stuff here

将遍历标准输入,直到文件结束为止。这一点也是如此:

代码语言:javascript
运行
复制
lines = sys.stdin.readlines()

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

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

代码语言:javascript
运行
复制
myprog.py < input_file.txt 

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

票数 39
EN

Stack Overflow用户

发布于 2015-04-05 05:23:30

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

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

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

代码语言:javascript
运行
复制
lines = sys.stdin.readlines()

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

您可以在Python教程的输入输出部分上阅读更多有关这方面的内容。

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

代码语言:javascript
运行
复制
user_input = input('Please enter something: ')
print('You entered: {}'.format(user_input))
票数 7
EN

Stack Overflow用户

发布于 2018-12-02 20:32:49

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

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

代码语言:javascript
运行
复制
import sys
lines = sys.stdin.readlines()
print (lines)

现在打开控制台,任何类型的:

代码语言:javascript
运行
复制
echo "line1 line2 line3" | python readStdin.py

脚本输出:

代码语言:javascript
运行
复制
['"line1 line2 line3" \n']

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29454365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档