线程中的合成非预期结果

2024-09-28 22:18:59 发布

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

我有两节课。1个网络和1个设备。设备是包含线程运行的主类。应用是获取网络信号。我初始化设备类中打开的方法内部的网络类句柄。然后,在Run方法中调用CSQ方法。但是,它没有调用CSQ方法。没有打印出来。它应该是start+CSQ

import serial
import time
import threading
import re
from serial import SerialException

class Network:
    def __init__(self, handle):
        self.handle = handle

    def CSQ(self):
       while True:
           self.handle.write('AT+CSQ')

           time.sleep(1)

class Device(threading.Thread):

    def __init__(self, port, baudrate):
        threading.Thread.__init__(self)
        self.port = port
        self.baudrate = baudrate

    def open(self):
        try:
            self.handle = serial.Serial(self.port, self.baudrate)
            self.network = Network(self.handle)

            return True
        except SerialException as e:
            error = re.findall(r"'(.*?)'", str(e))
            self.__error = error

            if error[1] == 'Access is denied.':
                return True
            elif error[1] == 'Port is already open.':
                return True
            else:
                return False

    def buffer(self):
        while True:    
            if self.open():
                buffer = self.handle.readline()

                if buffer == b'AT+CGMI\r\r\n':
                    data = []

                    while True:
                        buffers = self.handle.readline()

                        data.append(buffers)

                        if buffers == b'OK\r\n':
                            print(data[0])
                            break
                        elif buffers == b'ERROR\r\n':
                            break

                print(buffer)

                time.sleep(1)
            else:
                print('Device is not connecting')

    def write(self, command):
        if self.open():
            self.handle.write(command.encode('UTF-8') + b'\r')

    def error(self):
        return self.__error

    def run(self):
        self.buffer()
        self.network.CSQ()



device = Device('COM12', 9600)

device.open()

device.start() 

Tags: 方法importselftruereturnifportdef