import serial class abfactory(): def __init__(self, classname=None): self.process = classname def setup_baudrate(self, com, rate): self.process.setup_baudrate(self, com, rate) def turn_on_machine(self): self.process.turn_on_machine(self) def trun_off_machine(self): self.process.trun_off_machine(self) def readData(self): return self.process.readData(self) class CINO_S680(): # CINO S680 FUZZYSCAN Barcode Scanner ser = None def setup_baudrate(self, com, rate): self.ser = serial.Serial(com, rate) def turn_on_machine(self): msg = 'on' self.ser.write(str.encode(msg)) def trun_off_machine(self): msg = 'off' self.ser.write(str.encode(msg)) def readData(self): data_raw = None result = None try: while True: while self.ser.is_open: # self.ser.in_waiting ##一般寫法用來等有資料輸出 data_raw = self.ser.read_all() result = data_raw.decode() # 用預設的UTF-8解碼 if result != "": self.ser.close() break self.ser = None return str.strip(result) except Exception: print('err') if __name__ == "__main__": br = abfactory() br.process = CINO_S680 br.setup_baudrate('COM10', '9600') br.turn_on_machine() print(br.readData())