diff --git a/asciinema/file_writer.py b/asciinema/file_writer.py index c07e2d9..c06aede 100644 --- a/asciinema/file_writer.py +++ b/asciinema/file_writer.py @@ -36,8 +36,11 @@ class file_writer: self.on_error("Output pipe reopened successfully") self.file.write(data) # type: ignore else: - self.on_error("Output pipe broken") + self.on_error("Output pipe broken, recording suspended") raise e + except IOError as e: + self.on_error("Write error, recording suspended") + raise e def noop(_: Any) -> None: diff --git a/asciinema/recorder.py b/asciinema/recorder.py index 5045750..dcb4737 100644 --- a/asciinema/recorder.py +++ b/asciinema/recorder.py @@ -132,16 +132,20 @@ class async_writer(async_worker): self.enqueue([ts, "o", data]) def run(self) -> None: - with self.writer as w: - event: Tuple[float, str, Any] - for event in iter(self.queue.get, None): - assert event is not None - ts, etype, data = event + try: + with self.writer as w: + event: Tuple[float, str, Any] + for event in iter(self.queue.get, None): + assert event is not None + ts, etype, data = event - if etype == "o": - w.write_stdout(self.time_offset + ts, data) - elif etype == "i": - w.write_stdin(self.time_offset + ts, data) + if etype == "o": + w.write_stdout(self.time_offset + ts, data) + elif etype == "i": + w.write_stdin(self.time_offset + ts, data) + except IOError: + for event in iter(self.queue.get, None): + pass class async_notifier(async_worker):