如何在Python中从命令输出文本提取session_timeout对应数值
问题分析与解决
你的Python代码存在几个明显问题,导致无法正确获取session_timeout值:
- 命令字符串语法错误:原代码里的命令未用引号包裹,
format(ip)的调用位置也不对,导致命令格式混乱无法执行。 - 错误调用
out.read():subprocess.check_output()在设置universal_newlines=True时,直接返回字符串而非文件对象,调用read()会触发AttributeError。 - grep匹配内容有多余空格:你写的
session_ timeout包含两个空格,但实际输出是session_timeout,会导致grep匹配不到目标行。
修正后的代码
import subprocess ip = "你的目标IP地址" # 替换为实际目标IP try: # 用f-string拼接正确的命令,grep匹配准确关键词 cmd = f"ssh -o StrictHostKeyChecking=no {ip} sudo /var/application/mycommand | grep 'session_timeout'" # 执行命令并获取输出字符串 out = subprocess.check_output( cmd, stderr=subprocess.STDOUT, shell=True, universal_newlines=True ).strip() # 遍历输出行,提取session_timeout的数值 for line in out.split('\n'): if 'session_timeout:' in line: timeout_value = line.split(':')[1].strip() print(f"session_timeout值:{timeout_value}") break except subprocess.CalledProcessError as e: print(f"命令执行出错:{e.output}")
代码说明
- 用f-string拼接命令,确保IP被正确替换,同时让grep匹配准确的
session_timeout关键词,避免空格导致的匹配失败。 - 直接使用
check_output返回的字符串结果,无需额外调用read()。 - 通过遍历输出行定位目标内容,再用字符串分割提取具体数值。
- 添加异常捕获,处理SSH连接失败、sudo权限不足等命令执行错误的情况。
内容的提问来源于stack exchange,提问作者S Bill Trader
相关产品推荐
相关产品推荐

