【发布时间】:2019-11-12 23:35:16
【问题描述】:
pexpect.run() 返回的输出在每一行的末尾包含 \r\n。使用 print(returnVal.decode()) 打印到终端会为返回的每一行正确打印一行。当我检查输出时,我看到字节字符串包含 \r\n。当我将其记录到文件中时,我会双重返回到日志文件。我在使用 Python 3.7 的 Mac 上。有没有办法在编写输出时设置首选的新行?我正在使用 pythons 日志记录类并使用 info() 方法来编写字符串。输出如下所示:
total 80
-rw-r--r-- 1 xxxx admin 1048 Nov 12 00:41 Constants.py
-rw-r--r-- 1 xxxx admin 5830 Nov 12 13:33 file1.py
-rw-r--r-- 1 xxxx admin 2255 Nov 12 00:51 file2.py
什么时候应该是这样的:
total 80
-rw-r--r-- 1 xxxx admin 1048 Nov 12 00:41 Constants.py
-rw-r--r-- 1 xxxx admin 5830 Nov 12 13:33 file1.py
-rw-r--r-- 1 xxxx admin 2255 Nov 12 00:51 file2.py
这是我原来的 Logger 类的简化版本:
class Logger():
def __init__( self, path ):
msgFormat = '%(asctime)s.%(msecs)d\t%(message)s'
dateFormat = '%m/%d/%Y %H:%M:%S'
logging.basicConfig( format=msgFormat, datefmt=dateFormat, filename=path, level=logging.INFO )
def Log ( self, theStr ):
logging.info( str( theStr ))
从 Pexpect 返回的字符串类似于:
Line1\r\nLine2
【问题讨论】:
-
快速的解决方案是在记录之前将
\r\n替换为单个\n。日志模块似乎已经使用\n换行,所以这不是问题。 -
@Asad 我看不到日志记录模块有办法指定行尾。到目前为止,我读到的是 python 3 将使用平台默认行结尾。因为我在使用 \r\n 的 unix (Mac) 上。我想另一种方法是让 pexpect 设置行尾,但我也没有办法做到这一点。我不想做一个黑客并成为中间人。记录器最终控制行格式,因此在那里完成工作会很好。
-
您运行的是哪个版本的 Mac?我相信 Mac OS X 上的默认行现在是 \n。你可以做一个简单的
returnVal.decode().replace("\r\n", "\n")看看它是否能解决问题。 -
在 10.15 上使用 Python 3.7。我会做那个快速测试。
-
@Asan Yep 修复了它,但现在我正在逐行影响文件的文件格式。我宁愿我们简单地设置记录器的行为并忘记它。 :)
标签: python-3.x pexpect