pexpect 返回 Windows 样式换行符

1 投票
1 回答
764 浏览
提问于 2025-04-16 22:33

如果有人在Linux上使用过pexpect,你有没有注意到当使用它的readline()函数时,pexpect返回的是窗口风格的换行符?你知道有什么办法可以去掉这个吗?

1 个回答

2

不仅仅是readline()会返回\r\n,使用pexpect捕获的所有文本也都包含\r\n作为换行符。

文档中有以下解释:

readline(self, size=-1)

这个方法会读取并返回一整行内容。字符串末尾的换行符会保留,但如果文件以不完整的行结束,可能就没有这个换行符。注意:这个readline()方法在UNIX系统上也会寻找\r\n这一对换行符,因为伪终端设备返回的就是这个。所以,和你预期的不同,你会收到\r\n作为换行符。当立即遇到文件结束符(EOF)时,会返回一个空字符串。目前,size参数大部分情况下会被忽略,所以这个行为并不是文件对象的标准行为。如果size是0,那么会返回一个空字符串。

你可以这样做,把\r\n转换成\n:

line = child.readline()
line.replace('\r\n', '\n')

撰写回答