def run(self, *args, initial_port=None, baud=None, dry=None): port = self.get_port(initial_port) ser = Serial(port, baud) measurement = Measurement() while 1: try: while not ser.is_open: port = self.get_port(initial_port) print('.', end='', flush=True) if port: ser.setPort(port) try: ser.open() print('Serial connected', port, baud) break except SerialException as e: print('\n', e) time.sleep(5) serial_line = ser.readline().decode("utf-8") measurement.parse_line(serial_line) if measurement.completed: if measurement.is_complete(): if dry: print(measurement.as_dict()) else: ok = send_measurement(measurement) print('measurement send,', ok) measurement = Measurement() except KeyboardInterrupt: print('Serial reader closed, keyboard interrupt') ser.close() break except SerialException as e: print('Serial exception', e) ser.close() except Exception: # Something went very wrong ?? Very dirty fix for now update_script = '/home/pi/update.sh' if os.path.isfile(update_script): subprocess.call(update_script)