idf_monitor: Ignore OS-level errors writing to Windows Console

Windows Console write or flush may fail (throwing WindowsError, a subclass of OSError) if the data
written can't be displayed. This may be the case if the serial port is producing garbage bytes.

Ignore the error, in the hope that the serial port may "come good" and write non-garbage later.
This commit is contained in:
Angus Gratton 2019-07-24 19:29:08 +08:00 committed by bot
parent e8db1c4da0
commit 2e43d107b4

View file

@ -899,10 +899,13 @@ if os.name == 'nt':
self.output.write(data.decode())
else:
self.output.write(data)
except IOError:
except (IOError, OSError):
# Windows 10 bug since the Fall Creators Update, sometimes writing to console randomly throws
# an exception (however, the character is still written to the screen)
# Ref https://github.com/espressif/esp-idf/issues/1136
# Ref https://github.com/espressif/esp-idf/issues/1163
#
# Also possible for Windows to throw an OSError error if the data is invalid for the console
# (garbage bytes, etc)
pass
def write(self, data):
@ -939,7 +942,12 @@ if os.name == 'nt':
self.matched = b''
def flush(self):
self.output.flush()
try:
self.output.flush()
except OSError:
# Account for Windows Console refusing to accept garbage bytes (serial noise, etc)
pass
if __name__ == "__main__":
main()