PySerial在python3中呈现奇怪的行为

2024-10-01 00:35:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下课程(非常基础)通过AT命令与3G调制解调器通信:

import serial
import time

class ATCommands(object):

    def __init__(self, port):
        self.ser = None
        self.port = port
        self.open()

    def open(self):
        self.ser = serial.Serial('/dev/'+ self.port, 115200, timeout=1)

    def sendCommand(self,command):
        self.ser.write(command.encode())
        data = self.ser.readline().strip()
        return data

    def getIMEI(self):
        IMEI = self.sendCommand("AT+CGSN\r")
        IMEI = self.sendCommand("AT+CGSN\r")
        return IMEI

    def getIMEIErro(self):
        IMEI = self.sendCommand("AT+CGSN\r")
        return IMEI

    def getIMEIErro2(self):
        self.ser.write("AT+CGSN\r".encode())
        data = self.ser.readline().strip()
        return data

    def __del__(self):
        self.ser.close()


if __name__ == '__main__':
    print(ATCommands('ttyUSB1').getIMEI()) #OK
    print(ATCommands('ttyUSB1').getIMEIErro()) #erro
    print(ATCommands('ttyUSB1').getIMEIErro2()) #erro

在上面的代码中,我有两件奇怪的事情:

  1. getIMEI()只有在我执行语句self.sendCommand(“AT+CGSN\r”)连续两次。getTimeierro()显示发送单个命令时不会返回IMEI。

  2. 如果我运行命令self.ser.readline文件()方法之外的sendCommand()代码也不起作用。GetTimeierRo2()显示此错误

有人知道错误的原因吗?在

PS:我使用的是python3e pyserial2.7


Tags: 命令selfdatareadlinereturnportdefat
1条回答
网友
1楼 · 发布于 2024-10-01 00:35:34

您可以使用ArrayList保存图像集,然后使用Random以随机顺序将它们传输到另一个ArrayList。例如:

Random rn = new Random();
ArrayList<Image> imageSet = importImages();
ArrayList<Image> randomizedSet = randomize(imageSet, rn);

public static ArrayList<Image> importImages() {
    ArrayList<Image> images = new ArrayList<>();
    // put some code here to add each image to images twice
    return images;
}

public static ArrayList<Image> randomize(ArrayList<Image> imageSet, Random rn) {
    ArrayList<Image> images = new ArrayList<>();
    while (!imageSet.isEmpty()) {
        images.add(imageSet.remove(rn.nextInt(imageSet.size())));
    }
    return images;
}

本例中的randomize()方法将从imageSet中随机删除一个元素,并将其添加到images,直到imageSet没有剩余元素为止

相关问题 更多 >