如何捕获Python help()输出并赋值变量?以PyMeasure为例
获取PyMeasure支持的设备包列表的解决办法
你想核查PyMeasure支持的设备,需要提取pymeasure.instruments下的子包列表,但直接用help("pymeasure.instruments")赋值时总是得到None——这是因为help()函数只负责向控制台输出内容,不会返回任何有效数据,所以变量接收的就是默认的None。
下面提供两种可行的解决方法:
方法一:捕获并解析help输出
通过重定向标准输出,把help()的内容捕获下来,再提取出PACKAGE CONTENTS部分的内容:
import sys from io import StringIO # 保存原标准输出,替换为内存对象 old_stdout = sys.stdout captured_output = StringIO() sys.stdout = captured_output # 执行help命令 help("pymeasure.instruments") # 恢复原标准输出 sys.stdout = old_stdout # 解析捕获的内容 full_content = captured_output.getvalue() # 定位PACKAGE CONTENTS和FILE之间的区域 start_idx = full_content.find("PACKAGE CONTENTS") + len("PACKAGE CONTENTS") end_idx = full_content.find("FILE") package_section = full_content[start_idx:end_idx].strip() # 提取每个包名,去掉(package)标记 instrument_list = [line.strip().split()[0] for line in package_section.split("\n") if line.strip()] print(instrument_list)
方法二:直接扫描包结构(更可靠)
不需要解析文本,直接通过Python的包工具扫描pymeasure.instruments的子模块/子包,这种方法更稳定,不受help输出格式变化影响:
import pkgutil import pymeasure.instruments supported_devices = [] # 遍历instruments包下的所有子模块和子包 for _, module_name, is_package in pkgutil.iter_modules(pymeasure.instruments.__path__): supported_devices.append(module_name) print(supported_devices)
运行后就能得到所有PyMeasure支持的设备包列表,用来核查目标设备是否在列。
内容的提问来源于stack exchange,提问作者Nafew Nowshad
相关产品推荐
相关产品推荐

