0

我有这样的程序python脚本,

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    value = (rcv)
    myString = str(value)
    b = open("/var/www/lampu1.txt","a")
    b.write(myString[1])
    b.close()

该程序可以从串口接收数据,所有数据都将保存到文件“lampu1.txt”中。我只想从接收到的数据中获取 1 个字符串数据并写入文件。例如:数据接收=89435,我如何获取字符串数据,例如我想获取字符串数据[2]=9并写入文件“lampu1.txt”。因为当我执行这个程序时发生错误。这个错误发生在终端上。

Traceback (most recent call last):
File "terima.py", line 11, in <module>
b.write(myString[1])
IndexError: string index out of range

任何人都可以帮助我解决这个问题,,,谢谢。

4

2 回答 2

0

数据接收 = 89435,我如何获取字符串数据,例如,如果我想获取字符串数据 [2]=9 并写入文件...

如果字符串是,89435那么字符[2]不是9,它是4。字符串的第一个字符是 at [0],第二个字符是 at ,[1]依此类推——在 Python 中编码时,从 0 开始计算索引。

还:

rcv = port.read(5)
value = (rcv)
myString = str(value)

除非我遗漏了什么,否则重新分配rcvvalue这里没有用处。你没有用这些括号改变它的类型,也没有理由你必须使用三行来将这 5 个字节读取为str; 只是做myString = str(port.read(5))

事实上,你甚至可能不需要str()这里。取决于您期望从串行端口获得什么信息 - 整数?ASCII 字符?只有字母,还是空白字符?等等。

试试这个,看看它是否符合您的要求:

import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    b = open("/var/www/lampu1.txt","a")
    try:
        b.write(rcv[0])
    except IndexError:
        pass
    b.close()

在超时之前从端口读取 0 个字节时,您可以替换pass为您想要用来处理的任何逻辑。您可能还应该移动b.open()到块b.close()之外while,除非您有某种理由永远打开和关闭并打开和关闭文件,但是如果没有一些逻辑来退出循环,它就没有意义,所以我会让您处理靠你自己。

于 2013-08-26T21:09:32.743 回答
0
import serial
import time

port = serial.Serial("/dev/ttyAMA0", baudrate=600, timeout= 3.0)

while True:
    rcv = port.read(5)
    value = (rcv)
    myString = str(value)
    b = open("/var/www/lampu1.txt","a")
    #I want to output first character (0th entry)
    if (len(b) > 0):
        b.write(myString[0])
    else:
        b.write("Error condition")
    b.close()
于 2013-08-26T21:11:18.257 回答