diff --git a/packages/resources/npu_info.py b/packages/resources/npu_info.py index 3f95d1ef3d845c2988f964c11e4940d2841ccac2..65c5ea4349698bf6599b52000f65968db0b06ce6 100644 --- a/packages/resources/npu_info.py +++ b/packages/resources/npu_info.py @@ -149,42 +149,60 @@ def get_metadatas(bdf_path): def get_model(): bdf_file_paths = [] - flags = os.O_WRONLY - modes = stat.S_IWUSR | stat.S_IRUSR - devnull = os.fdopen(os.open(os.devnull, flags, modes), 'w') - for candidate_dir in glob.glob('/sys/bus/pci/devices/*'): - find_metadata_cmd = ["grep", "0x1200", - os.path.join(candidate_dir, "class")] - return_code = subprocess.call(find_metadata_cmd, shell=False, - stdout=devnull, stderr=subprocess.STDOUT) - if return_code == 0: - bdf_file_paths.append(candidate_dir) - for bdf_file_path in bdf_file_paths: - model = _get_model(bdf_file_path, devnull) - if model != '--': - return model + devnull = None # 初始化变量,确保 finally 中可判断 try: - cp = subprocess.Popen(args=shlex.split(FIND_SOC_PRODUCT_CMD), - shell=False, - universal_newlines=True, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - except Exception: + flags = os.O_WRONLY + modes = stat.S_IWUSR | stat.S_IRUSR + devnull = os.fdopen(os.open(os.devnull, flags, modes), 'w') + + # 收集候选目录 + for candidate_dir in glob.glob('/sys/bus/pci/devices/*'): + find_metadata_cmd = ["grep", "0x1200", os.path.join(candidate_dir, "class")] + return_code = subprocess.call( + find_metadata_cmd, + shell=False, + stdout=devnull, + stderr=subprocess.STDOUT + ) + if return_code == 0: + bdf_file_paths.append(candidate_dir) + + for bdf_file_path in bdf_file_paths: + model = _get_model(bdf_file_path, devnull) + if model != '--': + return model + + try: + cp = subprocess.Popen( + args=shlex.split(FIND_SOC_PRODUCT_CMD), + shell=False, + universal_newlines=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE + ) + except Exception: + return '--' + + dmi_info_lines = cp.stdout.readlines() + raw_product = "" + for line in dmi_info_lines: + if 'Product' in line: + product_infos = line.split(':') + if len(product_infos) < 2: + return '--' + raw_product = product_infos[1] + break + + product = raw_product.replace('\t', '').replace('\n', '').strip() + if product == 'Atlas 200I SoC A1': + return product + return '--' - dmi_info_lines = cp.stdout.readlines() - raw_product = "" - for i in dmi_info_lines: - if 'Product' in i: - product_infos = i.split(':') - if len(product_infos) < 2: - return '--' - raw_product = product_infos[1] - break - product = raw_product.replace('\t', '').replace('\n', '').strip() - if product == 'Atlas 200I SoC A1': - return product - return '--' + + finally: + if devnull is not None: # 确保 devnull 被正确关闭 + devnull.close() def _get_model(bdf_file_path, devnull):