如何从Paramiko读取的字节数据中提取boot-args字段值?
提取nvram返回结果中的boot-args值
先修正解码逻辑
注意stdout.read()只能读取一次,读取后流指针会移到末尾,重复调用会获取空数据。正确的解码步骤应该是先保存读取到的bytes数据,再进行解码:
# 读取远程命令返回的bytes数据 data_readback = stdout.read() # 解码为字符串,优先尝试utf-8,若失败可替换为utf-16或系统默认编码 boot_args_readback = data_readback.decode("utf-8").strip()
提取boot-args对应值的两种方法
方法一:字符串分割(简单直接)
nvram的输出通常每行对应一个变量,直接按行遍历匹配:
# 按行分割输出内容 for line in boot_args_readback.splitlines(): # 匹配以boot-args开头的行 if line.startswith("boot-args "): # 分割出变量值(分割一次,避免值中包含空格的情况) boot_args_value = line.split(" ", 1)[1] print(boot_args_value) # 输出类似debug=0x104c0c的结果 break
方法二:正则表达式(更鲁棒)
如果输出格式存在不确定的空格或排版变化,用正则匹配更可靠:
import re # 匹配boot-args后的所有内容,忽略开头的任意空格 match_result = re.search(r'boot-args\s+(.*)', boot_args_readback) if match_result: boot_args_value = match_result.group(1) print(boot_args_value)
注意事项
- 若解码时出现编码错误,可尝试替换编码格式为
utf-16,或使用sys.getdefaultencoding()获取系统默认编码进行解码。 - 确保远程执行的nvram命令是
nvram boot-args(只获取指定变量),如果执行的是nvram -p(列出所有变量),上述方法依然有效。
内容的提问来源于stack exchange,提问作者Sinha
相关产品推荐
相关产品推荐

