我有一个功能sys.stdin.readlines()
的代码。
上述问题与sys.stdin.buffer.readlines()
之间有什么区别?
他们究竟做了什么?
答案 0 :(得分:0)
1)sys.stdin
是TextIOWrapper
,其目的是从stdin读取文本。结果字符串将是实际str
s。 sys.stdin.buffer
是BufferedReader
。你从这里获得的行将是字节串
2)他们阅读stdin
中的所有行,直到达到eof
或者达到了你给他们的限制
3)如果您尝试阅读一行,可以使用.readline()
(不是:否s
)。否则,在命令行上与程序交互时,你必须给它EOF信号(* nix上的Ctrl + D)
您是否有理由这样做而不是仅仅调用input()
从stdin获取一个文本行?
答案 1 :(得分:0)
来自docs
sys.stdin
sys.stdout的
sys.stderr
与解释器的标准输入,输出和错误流相对应的文件对象。 stdin用于除脚本之外的所有解释器输入,但包括对input()的调用。 stdout用于输出print()和expression语句以及input()的提示。解释器自己的提示和(几乎所有)其错误消息都转到stderr。 stdout和stderr不需要是内置文件对象:任何对象都是可接受的,只要它有一个带有字符串参数的write()方法即可。 (更改这些对象不会影响os.popen(),os.system()或os模块中exec *()函数系列执行的标准I / O进程流。)
注意:默认情况下,标准流处于文本模式。要将二进制数据写入或读取,请使用基础二进制缓冲区。例如,要将字节写入stdout,请使用
sys.stdout.buffer.write(b'abc')
。
因此,sys.stdin.readlines()
读取传递给stdin
的所有并分离内容,以便形成行(结果会得到一个列表)。
sys.stdin.buffer.readlines()
执行相同的操作,但是对于stdin的缓冲区。我建议使用第一种方法,因为缓冲区可能是空的,而stdin可能包含一些数据。
如果您想在某个时刻停止,请使用readline()
一次只读取一行。