Python .readline()

Posted

技术标签:

【中文标题】Python .readline()【英文标题】: 【发布时间】:2013-07-27 14:12:28 【问题描述】:

首先让我先介绍一下我是 python 新手,这里没有自我。我有这个代码,我从各个站点拼凑而成,最终目标是将十六进制代码输出到 OBD-II 芯片并等待响应。此响应(也是 HEX)被转换为十进制处理并发送到输出。很简单吧?

嗯,有两个问题。

其中一个是 .readline() 删除响应的第一个字母。

例如,如果我想要 ">Elm327",我会返回 ">lm327"。

另一个更大的问题是当我使用 .readline() 时,如果我使用下面的代码,我只会收到我发送的请求:

serialport.write("01 0D \r")
speed_hex = serialport.readline().split(' ')
speed = float(int('0x'+speed_hex[6:8], 0 ))
print 'Speed: ', speed, 'km/h'`  

我想 .readline 以返回 41 0D 15 而不是我得到类似 E\r\r01 0D \r \r" 的东西

speed_hex = serialport.readline().split(' ')  

这也会返回一个错误,但我会为此单独发一篇文章。

有什么想法吗?谢谢

【问题讨论】:

【参考方案1】:

我怀疑您的串行端口设置与主板的设置不完全匹配尝试使用终端,直到您获得确切的设置然后使用这些设置。

注意,您不需要预先添加 0x 来转换可以使用 int(s, 16) 的十六进制值,其中 s 是您的子字符串。

【讨论】:

串行是 minicom 中的精品。我会尝试简单的 int 代替。有没有办法选择我想阅读的信息?或者例如,如果我在E/r/r41 0D 15/r/r 中阅读,我怎样才能抓住15 但是究竟是波特率、奇偶校验、字长、停止位等的设置 - 你需要复制它们全部 完全来自你的python程序。一旦获得一致的结果,您就可以选择使用正则表达式,或者像嵌入式系统通常的情况一样,您需要的数据位于字符串中的一致位置,只是简单的字符串切片。另外不要忘记 '\r' 在某些系统上可以是换行符。 好的。我在这里得到了一些不错的数字。感谢您的系列建议。 time.sleep(5) serialport.write("01 0C \r") serialport.flushInput() serialport.flushOutput() time.sleep(.5) rpm_hex = serialport.readline().split(' ') print rpm_hex rpm = float(int('0x'+rpm_hex[1], 0 )) rpm = rpm/4 print 'Tach: ', rpm, 'rpm' 这输出 ['01', '0C', '\r41', '0C', '20', '34', '\r\r>'] 12.0 Tach: 3.0 rpm Which the 12.0 is equal to the hex value of **0C** which is the second part it reads in ['01', '0C', '\r41', '0C', '20', '34', '\r\r>']` . 问题是:假设0Crpm的值。如何选择我想要的十六进制数?例如,从名为rpm_hex=['01', '0C', '\r41', '0C', '20', '34', '\r\r>'] 的字符串中,我想选择'20''34' 作为'rpm' 的值? float(int('0x'+rpm_hex[1],0)) 是否选择值? rpm = float(int('0x'+rpm_hex[4], 0 )) 是否选择 '20 您需要查看芯片的文档以了解第 5 条回复中的字段含义是您需要的,然后 float(int(rpm_hex[4], 16)) 将做这个伎俩。

以上是关于Python .readline()的主要内容,如果未能解决你的问题,请参考以下文章

python中read()readline()readlines()函数

read()readline()readlines() -- Python

python中read(),readline(),和readlines()

Python中的read(), readline(), readlines()

python read readline readlines区别

python中read() ,readline()以及readlines()区别