我了解了如何打开文件,然后将Python的预内置函数与它们一起使用。但是sys.stdin是如何工作的呢?
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()以上两种不同用途在sys.stdin上的区别是什么?它在哪里读取信息?它是通过键盘,还是我们仍然需要提供一个文件?
发布于 2015-04-05 08:37:01
因此,您已经使用了Python的“预内置函数”,大概如下所示:
file_object = open('filename')
for something in file_object:
some stuff here它通过调用文件对象上的迭代器来读取文件,而文件对象恰好从文件返回下一行。
相反,您可以使用:
file_object = open('filename')
lines = file_object.readlines()它将当前文件位置中的行读入列表。
现在,sys.stdin只是另一个文件对象,它恰好是在程序启动之前由Python打开的。您如何处理该文件对象取决于您自己,但它与任何其他文件对象并没有什么不同,只是您不需要一个open。
for something in sys.stdin:
some stuff here将遍历标准输入,直到文件结束为止。这一点也是如此:
lines = sys.stdin.readlines()您的第一个问题实际上是关于使用文件对象的不同方式。
第二,它是从哪里读来的?它正在读取文件描述符0(零)。在Windows上,它是文件句柄0(零)。默认情况下,文件描述符/句柄0连接到控制台或tty,因此它实际上是从键盘读取的。但是,它可以被重定向,通常由shell (如bash或cmd.exe)使用如下语法:
myprog.py < input_file.txt 它将文件描述符更改为零,以读取文件而不是键盘。在UNIX或Linux上,这使用底层调用dup2()。阅读您的shell文档,了解更多关于重定向的信息(或者,如果您勇敢,可以阅读man dup2 )。
发布于 2015-04-05 05:23:30
它是从标准输入中读取的,它应该由键盘以流数据的形式提供。
它不需要提供文件,但是可以使用重定向作为标准输入。
在Python中,readlines()方法读取整个流,然后在换行符处将其拆分,并创建每一行的列表。
lines = sys.stdin.readlines()上面创建了一个名为行的列表,其中每个元素都是一行(由行字符的末尾确定)。
您可以在Python教程的输入输出部分上阅读更多有关这方面的内容。
如果要提示用户输入,请使用input()方法(在Python2中,使用raw_input()):
user_input = input('Please enter something: ')
print('You entered: {}'.format(user_input))发布于 2018-12-02 20:32:49
要了解sys.stdin的工作原理,请执行以下操作:
创建一个简单的python脚本,让我们将其命名为"readStdin.py":
import sys
lines = sys.stdin.readlines()
print (lines)现在打开控制台,任何类型的:
echo "line1 line2 line3" | python readStdin.py脚本输出:
['"line1 line2 line3" \n']因此,脚本将输入读入列表(名为“line”),包括由“echo”生成的新行字符。那是。
https://stackoverflow.com/questions/29454365
复制相似问题