PYSERIAL将LF转换为LF / CR

时间:2014-01-19 17:10:36

标签: python serial-port ascii raspberry-pi pyserial

我正在使用GhostPDL pcl6应用程序将文本文件打印到PDF。文本文件包含从连接到PLC控制器的串行端口捕获的文本。某些打印数据来自较旧的系统,该系统仅使用换行LF来终止行终止,并且不提供CR回车字符。结果是PDF打印有“阶梯步进”问题。可以将激光打印机设置为AUTO CR以使打印件正常打印。但是,我找不到在pcl6 print命令中设置-sDEVICE = pdfwrite设置以添加自动CR的解决方案。

我的串行捕获程序基于pySerial tcp_serial_redirect.py的修改版本。

https://github.com/jaredly/pydbgp/blob/master/symbian/serial_tcp_redirect.py

这在Raspberry Pi上用作可编程设备服务器。串行打印转发到以太网打印机端口9100.

除了其他功能外,为了将串行数据捕获到文本文件,我在程序中添加了一个write to file命令:

                if data:
                    logfile = open("/var/www/active_log.txt","a")
                    logfile.write(data)
                    logfile.close()

问题是文本文件没有所需的CR字符。 Windows中的Python程序创建一个文本文件,并将LF转换为LF / CR,但不转换为Raspberry Pi。

我的解决方案是在最初的pyserial计划中找到的:

http://sourceforge.net/p/pyserial/code/HEAD/tree/trunk/pyserial/examples/tcp_serial_redirect.py

我简化了连接和拆分公式。

                if data:
                    data = '\r\n'.join(data.split('\n'))
                    logfile = open("/var/www/active_log.txt","a")
                    logfile.write(data)
                    logfile.close()

在寻找解决方案数小时后,这个似乎是最简单的。我试过stty设置和其他途径。也许这可能有助于某人或者可能有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

据我了解,您正尝试将所有\n替换为\r\n。这样的事怎么样?

data = data.replace('\n', '\r\n')

希望这有帮助。