Python sys.stdin读什么?
我了解了如何打开文件,然后使用Python的预构建函数。但是sys.stdin是如何工作的呢Python sys.stdin读什么?,python,file,stdin,sys,Python,File,Stdin,Sys,我了解了如何打开文件,然后使用Python的预构建函数。但是sys.stdin是如何工作的呢 for something in sys.stdin: some stuff here lines = sys.stdin.readlines() 在sys.stdin上的上述两种不同用途之间有什么区别?它从哪里读取信息?它是通过键盘,还是我们仍然需要提供一个文件?它是从标准输入中读取的,应该由键盘以流数据的形式提供 不需要提供文件,但是您可以将文件用作标准输入 在Python中,readl
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()
在sys.stdin上的上述两种不同用途之间有什么区别?它从哪里读取信息?它是通过键盘,还是我们仍然需要提供一个文件?它是从标准输入中读取的,应该由键盘以流数据的形式提供
不需要提供文件,但是您可以将文件用作标准输入
在Python中,readlines()
方法读取整个流,然后在换行符处将其拆分,并创建每行的列表
lines = sys.stdin.readlines()
上面创建了一个名为lines的列表,其中每个元素都是一行(由行尾字符确定)
您可以在Python教程的末尾阅读更多关于这方面的内容
如果要提示用户输入,请使用input()
方法(在Python 2中,使用raw\u input()
):
上面的代码不能像您期望的那样工作,因为sys.stdin
是一个文件句柄-它是stdin
的一个文件句柄。它不会到达此处的某些内容
行
lines = sys.stdin.readlines()
当上面的脚本在交互式shell中运行时,它将阻止执行,直到用户按下Ctrl-D,这表示输入结束。因此您使用了Python的“预构建函数”,大概是这样的:
file_object = open('filename')
for something in file_object:
some stuff here
myprog.py < input_file.txt
它通过调用file对象上的迭代器读取文件,迭代器恰好返回文件的下一行
您可以改为使用:
file_object = open('filename')
lines = file_object.readlines()
它将当前文件位置的行读取到列表中
现在,sys.stdin
只是另一个文件对象,它恰好在程序启动之前由Python打开。如何处理该文件对象取决于您,但它与任何其他文件对象都没有什么不同,只是您不需要打开
for something in sys.stdin:
some stuff here
将遍历标准输入,直到到达文件末尾。这也将:
lines = sys.stdin.readlines()
您的第一个问题实际上是关于使用文件对象的不同方式
第二,它是从哪里读来的?它正在读取文件描述符0(零)。在Windows上,它是文件句柄0(零)。默认情况下,文件描述符/句柄0连接到控制台或tty,因此实际上它是从键盘读取的。但是,它可以重定向,通常由shell(如bash或cmd.exe)使用以下语法重定向:
file_object = open('filename')
for something in file_object:
some stuff here
myprog.py < input_file.txt
myprog.py
这会将文件描述符更改为零,以读取文件而不是键盘。在UNIX或Linux上,这使用底层调用
dup2()
。阅读您的shell文档以了解有关重定向的更多信息(如果您勇敢的话,也可以阅读man dup2
。要了解sys.stdin的工作原理,请执行以下操作:
创建一个简单的python脚本,将其命名为“readStdin.py”:
现在打开控制台中的任意类型:
echo "line1 line2 line3" | python readStdin.py
脚本输出:
['"line1 line2 line3" \n']
因此,脚本已将输入读入列表(名为“lines”),包括由“echo”生成的新行字符。也就是说。根据me sys.stdin.read()方法接受一行作为用户输入,直到输入一个特殊字符,如Enter键,后跟Ctrl+D,然后将输入存储为字符串 控制+D用作停止信号 例如:
import sys
input = sys.stdin.read()
print(input)
tokens = input.split()
a = int(tokens[0])
b = int(tokens[1])
print(a + b)
运行程序后,输入两个以空格分隔的数字,完成后按Control+D一次或两次,您将看到两个输入的总和。您熟悉
input()
?无论input()
从何处获取输入,都是sys.stdin
。这可能是一个终端,或者它可能是从文件中定向的,或者它可能来自另一个程序的输出,或者它可能是其他东西,这取决于您调用程序的方式。那么,当我使用sys.stdin.readlines()而不是sys.stdin时,标准输入的读取方式有什么不同呢?第二个输入是否到达每个字?我仍然很困惑。那么,当我使用sys.stdin.readlines()而不是sys.stdin时,标准输入的读取方式有什么不同呢?第二个输入是否到达每个单词?我仍然感到困惑。在python 3中,是一种文本流。完成文本输入后,在Windows上按Enter键,然后按Ctrl+Z-->键
import sys
input = sys.stdin.read()
print(input)
tokens = input.split()
a = int(tokens[0])
b = int(tokens[1])
print(a + b)