如何用Python脚本从Sybase sp_helpdb输出提取数据库状态
提取SQL Server数据库状态字段内容的Python实现
我需要提取sp_helpdb pubs2输出中status字段的内容“trunc log on chkpt, mixed log and data”,但以下Python脚本未得到预期结果:
cmd = 'sp_helpdb pubs2' res = subprocess.getoutput(cmd) print(cmd)
sp_helpdb pubs2的输出如下:
name db_size owner dbid created status ------ -------- ------ ----- ------------- ------------------------------- pubs2 20.0 MB sa 4 Apr 13, 2005 trunc log on chkpt, mixed log and data (1 row affected) pubs2 device_fragments size usage created free kbytes ------------------ ------- ------------- ------------------- ------- master 10.0 MB data and log Apr 13 2005 10:29AM 2304 pubs_2_dev 10.0 MB data and log Apr 13 2005 10:33AM 9888 device segment ------------- ---------------------------------------------------- master default master logsegment master system pubs_2_dev default pubs_2_dev logsegment pubs_2_dev system pubs_2_dev titleseg1 pubs_2_dev titleseg2 pubs_2_dev titleseg3 pubs_2_dev titleseg4 pubs_2_dev titleseg5
解决方案
方法1:正则表达式匹配
利用正则表达式匹配跨换行的状态内容,处理后输出:
import subprocess import re cmd = 'sp_helpdb pubs2' res = subprocess.getoutput(cmd) # 匹配目标状态的跨行内容 status_pattern = re.compile(r'trunc log on chkpt, mixed log\s+and data') match_result = status_pattern.search(res) if match_result: # 移除换行符并整理格式 clean_status = match_result.group().replace('\n', ' ').strip() print(clean_status) else: print("未找到目标状态信息")
方法2:逐行解析文本
通过分割输出行,定位状态所在行后拼接下一行内容:
import subprocess cmd = 'sp_helpdb pubs2' res = subprocess.getoutput(cmd) output_lines = res.splitlines() target_status = "" for idx, line in enumerate(output_lines): if 'trunc log on chkpt' in line: # 拼接当前行和下一行的有效内容 target_status = f"{line.strip()} {output_lines[idx+1].strip()}" break print(target_status)
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

