Fix IORegistry issue

This commit is contained in:
Dhinak G
2021-06-22 16:25:50 -04:00
parent 8f251c1214
commit c42ec31415
2 changed files with 57 additions and 9 deletions

View File

@@ -1,9 +1,12 @@
from __future__ import annotations
from dataclasses import dataclass
import plistlib
import subprocess
import tempfile
from dataclasses import dataclass
from pathlib import Path
from typing import Generator
from xml.parsers.expat import ExpatError
@dataclass
@@ -18,7 +21,15 @@ class IORegistryEntry:
class IOReg:
def __init__(self):
self.ioreg = plistlib.loads(subprocess.run("ioreg -a -l".split(), stdout=subprocess.PIPE).stdout.strip())
try:
self.ioreg = plistlib.loads(subprocess.run("ioreg -a -l".split(), stdout=subprocess.PIPE).stdout.strip())
except ExpatError:
fd, file_path = tempfile.mkstemp(suffix=".plist")
with open(fd, "wb") as file_obj:
file_obj.write(subprocess.run("ioreg -a -l".split(), stdout=subprocess.PIPE).stdout.strip())
subprocess.run("plutil -convert binary1".split() + [file_path])
self.ioreg = plistlib.load(Path(file_path).open("rb"))
self.tree = self.recurse(self.ioreg, None)
def recurse(self, entry, parent):