python-sys.stdin.readlines(),停止在命令行中读取行

时间:2015-06-06 17:27:56

标签: python python-3.x

我有一个功能sys.stdin.readlines()的代码。

  1. 上述问题与sys.stdin.buffer.readlines()之间有什么区别?

  2. 他们究竟做了什么?

  3. 如果他们从命令行读取行,如何在某个时刻停止读取行并继续浏览程序?

2 个答案:

答案 0 :(得分:0)

1)sys.stdinTextIOWrapper,其目的是从stdin读取文本。结果字符串将是实际str s。 sys.stdin.bufferBufferedReader。你从这里获得的行将是字节串

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()一次只读取一行