From 7437668f1e51eb3c88f7a0ddc7ad7ef30b7f64a5 Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Mon, 4 Nov 2024 06:39:31 -0500 Subject: [PATCH] Handle lsblk output bytes in json.loads() (#2741) --- archinstall/lib/disk/device_model.py | 8 ++++---- archinstall/lib/general.py | 7 +++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/archinstall/lib/disk/device_model.py b/archinstall/lib/disk/device_model.py index 20cd94b7..78847ce7 100644 --- a/archinstall/lib/disk/device_model.py +++ b/archinstall/lib/disk/device_model.py @@ -1435,7 +1435,7 @@ def _fetch_lsblk_info( cmd.append(str(dev_path)) try: - result = SysCommand(cmd).decode() + worker = SysCommand(cmd) except SysCallError as err: # Get the output minus the message/info from lsblk if it returns a non-zero exit code. if err.worker: @@ -1448,12 +1448,12 @@ def _fetch_lsblk_info( raise err try: - block_devices = json.loads(result) + data = json.loads(worker.output(remove_cr=False)) except json.decoder.JSONDecodeError as err: - error(f"Could not decode lsblk JSON: {result}") + error(f"Could not decode lsblk JSON:\n{worker.output().decode().rstrip()}") raise err - blockdevices = block_devices['blockdevices'] + blockdevices = data['blockdevices'] return [LsblkInfo.from_json(device) for device in blockdevices] diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index 6ec9b37e..6d738890 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -442,11 +442,14 @@ class SysCommand: return val.strip() return val - def output(self) -> bytes: + def output(self, remove_cr: bool = True) -> bytes: if not self.session: raise ValueError('No session available') - return self.session._trace_log.replace(b'\r\n', b'\n') + if remove_cr: + return self.session._trace_log.replace(b'\r\n', b'\n') + + return self.session._trace_log @property def exit_code(self) -> Optional[int]: