diff --git a/esptool/cmds.py b/esptool/cmds.py index f81c1c252..e6eb942ec 100644 --- a/esptool/cmds.py +++ b/esptool/cmds.py @@ -140,7 +140,7 @@ def check_if_stub(instance): connect_mode, connect_attempts, detecting=True, warnings=False ) log.print("Detecting chip type...", end="") - sys.stdout.flush() + log.flush() chip_magic_value = detect_port.read_reg( ESPLoader.CHIP_DETECT_MAGIC_REG_ADDR ) @@ -183,7 +183,7 @@ def load_ram(esp, args): for seg in image.segments: size = len(seg.data) log.print(f"Downloading {size} bytes at {seg.addr:08x}...", end=" ") - sys.stdout.flush() + log.flush() esp.mem_begin( size, div_roundup(size, esp.ESP_RAM_BLOCK), esp.ESP_RAM_BLOCK, seg.addr ) @@ -218,7 +218,7 @@ def dump_mem(esp, args): percent = f.tell() * 100 // args.size log.set_progress(percent) log.print_overwrite(f"{f.tell()} bytes read... ({percent} %)") - sys.stdout.flush() + log.flush() log.print_overwrite(f"Read {f.tell()} bytes", last_line=True) log.print("Done!") @@ -643,7 +643,7 @@ def write_flash(esp, args): "Writing at 0x%08x... (%d %%)" % (address + bytes_written, percent) ) - sys.stdout.flush() + log.flush() block = image[0 : esp.FLASH_WRITE_SIZE] if compress: # feeding each compressed block into the decompressor lets us @@ -697,7 +697,7 @@ def write_flash(esp, args): break except SerialException: log.print(".", end="") - sys.stdout.flush() + log.flush() else: raise # Reconnect limit reached diff --git a/esptool/loader.py b/esptool/loader.py index 90246e401..60e9ea021 100644 --- a/esptool/loader.py +++ b/esptool/loader.py @@ -629,7 +629,7 @@ def _connect_attempt(self, reset_strategy, mode="default_reset"): return None except FatalError as e: log.print(".", end="") - sys.stdout.flush() + log.flush() time.sleep(0.05) last_error = e @@ -723,7 +723,7 @@ def connect( ) log.print("Connecting...", end="") - sys.stdout.flush() + log.flush() last_error = None reset_sequence = self._construct_reset_strategy_sequence(mode) diff --git a/esptool/logger.py b/esptool/logger.py index a7566edd2..c4b087df6 100644 --- a/esptool/logger.py +++ b/esptool/logger.py @@ -49,6 +49,12 @@ def set_progress(self, percentage: float): """ pass + @abstractmethod + def flush(): + """ + Flushes the current loging to stdout + """ + pass class EsptoolLogger(TemplateLogger): ansi_red = "\033[1;31m" @@ -131,6 +137,14 @@ def set_progress(self, percentage: float): """ pass + @abstractmethod + def flush(): + try: + sys.stdout.flush() + except AttributeError: + # to handle certain contexts where sys.stdout is not available (None) + pass + def set_logger(self, new_logger): self.__class__ = new_logger.__class__