一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于虚拟终端的命令执行结果分析方法及系统与流程

2022-06-02 18:04:13 来源:中国专利 TAG:


1.本发明涉及命令批处理技术领域,具体地说是基于虚拟终端的命令执行结果分析方法及系统。


背景技术:

2.通信网络运维工作中经常需要对多台网络设备或主机设备进行批处理操作,常见的操作是用无人值守的方式自动执行一批命令。传统批处理操作一般步骤是下发命令,接收命令结果并判断是否包含命令结束符,若包含命令结束符就下发下一条命令,如此循环,直到所有命令执行完成。传统批处理方式实现方便,但存在若干问题,例如:
3.(1)执行结果中无命令结束符或在结果中的其他位置也包括命令结束符时,会造成无法有效地判断结束符的位置,导致命令结果不完整或批处理执行乱序的问题;
4.(2)执行结果中不仅包含可阅读的文本字符,也包括ansi和vt100终端控制字符,这些控制字符混杂在正常文本结果中,不仅干扰命令结束符判断,而且还会导致记录的结果中出现大量的乱码,不利于分析命令执行结果;
5.(3)无法处理命令间的数据依赖关系,有时,下一条命令执行时的输入参数依赖上一条命令执行结果中的数据。
6.基于上述,如何对命令执行结果进行分析、去除无效字符,并处理命令间的数据依赖关系、有效提取有效数据,是需要解决的技术问题。


技术实现要素:

7.本发明的技术任务是针对以上不足,提供基于虚拟终端的命令执行结果分析方法及系统,来解决如何对命令执行结果进行分析、去除无效字符,并处理命令间的数据依赖关系、有效提取有效数据的技术问题。
8.第一方面,本发明的基于虚拟终端的命令执行结果分析方法,包括如下步骤:
9.向目标设备发送命令后,在内存中创建虚拟终端窗口;
10.将返回的命令执行结果数据追加至虚拟终端窗口中,所述命令执行结果数据包括文本字符和控制字符,所述控制字符包括ansi格式和vt100格式的字符;
11.对命令执行结果数据进行解析筛选,去除控制字符并在内存中保留提取的文本字符,并基于控制字符对文本字符进行格式化处理,得到最终命令执行结果数据,所述最终命令执行结果数据还原了命令执行结果原本的格式和内容;
12.对最终命令执行结果数据进行分析,提取有效命令执行结果信息。
13.作为优选,在内存中分配一个固定行列的二维字符数组,所述二维字符数组作为存储文本字符的缓存。
14.作为优选,对命令执行结果数据进行解析筛选,去除控制字符并在内存中保留提取的文本字符,并基于控制字符对文本字符进行格式化处理时,对于命令执行结果数据对应的字符流,依次读取一个字符,对于每个字符,执行如下操作:
15.对于每个字符,判断当前字符是否大于31;
16.如果当前字符大于31,表示当前字符为文本字符,将当前字符存储至内存中;
17.如果当前字符小于31,表示当前字符为控制字符;
18.对于控制字符,判断当前字符是否为esc字符,所述esc字符为absi 序列的标志符;
19.如果当前字符为esc字符,表示当前字符为ansi序列,基于ansi序列对缓存中文字字符进行格式化处理;
20.如果当前字符不是esc字符,判断当前字符是否为其它控制字符,所述其它控制字符包括回车、换行、退格和制表字符;
21.如果当前字符是其它控制字符,基于当前其它控制字符对缓存中文本字符进行格式化处理;
22.如果当前字符不是其它控制字符,丢弃读入的当前字符,并读取下一个字符。
23.作为优选,将当前字符存储至内存中时,判断缓存中当前列是否为最大列,如果是,将当前文本字符在缓存中对应的位置为:行位置加1、列位置为0,如果当前列不是最大列,更新缓存中当前行和列的位置。
24.作为优选,所述ansi序列中,以esc字符作为标志符,包括光标移动指令、清屏指令、字符渲染指令以及终端控制指令;
25.基于ansi序列对缓存中文字字符进行格式化处理,包括如下步骤:
26.读取一个ansi序列;
27.判断所述ansi序列是否为光标移动指令,如果是,更新缓存中当前行列的位置;
28.如果不是光标移动指令,判断所述ansi序列是否为清屏移动指令,如果是清屏移动指令,从缓存中的当前行列对应的位置,对缓存内容进行复位;
29.如果不是光标移动指令,判断所述ansi序列是否为终端控制指令,如果是,基于ansi序列对应的指令内容修正缓存中的内容;
30.如果不是终端控制指令,丢弃当前ansi序列对应的字符。
31.作为优选,通过扫描的方法对最终命令执行结果数据进行分析,提取有效命令执行结果信息,或者,基于正则表达式以及分词方法对最终命令执行结果数据进行分析,提取有效命令执行结果信息。
32.第二方面,本发明的基于虚拟终端的命令执行结果分析系统,用于通过如第一方面任一项所述的基于虚拟终端的命令执行结果分析方法对命令执行结果进行分析,所述系统包括:
33.配置模块,所述配置模块用于向目标设备发送命令后,在内存中创建虚拟终端窗口;
34.读取模块,所述读取模块用于将命令执行结果数据追加至虚拟终端窗口,所述命令执行结果数据包括文本字符和控制字符,所述控制字符包括ansi 格式和vt100格式的字符;
35.解析筛选模块,所述解析筛选模块用于对命令执行结果数据进行解析筛选,去除控制字符并在内存中保留提取的文本字符,并基于控制字符对文本字符进行格式化处理,得到最终命令执行结果数据,所述最终命令执行结果数据还原了命令执行结果原本的格式
和内容;
36.信息提取模块,所述信息提取模块用于对最终命令执行结果数据进行分析,提取有效命令执行结果信息。
37.作为优选,所述配置模块用于在内存中分配一个固定行列的二维字符数组,所述二维字符数组作为存储文本字符的缓存。
38.作为优选,对于命令执行结果数据对应的字符流,所述解析筛选模块用于依次读取一个字符,对于每个字符,执行如下操作:
39.对于每个字符,判断当前字符是否大于31;
40.如果当前字符大于31,表示当前字符为文本字符,将当前字符存储至内存中;
41.如果当前字符小于31,表示当前字符为控制字符;
42.对于控制字符,判断当前字符是否为esc字符,所述esc字符为absi 序列的标志符;
43.如果当前字符为esc字符,表示当前字符为ansi序列,基于ansi序列对缓存中文字字符进行格式化处理;
44.如果当前字符不是esc字符,判断当前字符是否为其它控制字符,所述其它控制字符包括回车、换行、退格和制表字符;
45.如果当前字符是其它控制字符,基于当前其它控制字符对缓存中文本字符进行格式化处理;
46.如果当前字符不是其它控制字符,丢弃读入的当前字符,并读取下一个字符;
47.所述解析筛选模块用于将当前字符存储至内存中时,判断缓存中当前列是否为最大列,如果是,将当前文本字符在缓存中对应的位置为:行位置加 1、列位置为0,如果当前列不是最大列,更新缓存中当前行和列的位置;
48.所述ansi序列中,以esc字符作为标志符,包括光标移动指令、清屏指令、字符渲染指令以及终端控制指令;
49.所述解析筛选模块用于通过如下步骤、基于ansi序列对缓存中文字字符进行格式化处理:
50.读取一个ansi序列;
51.判断所述ansi序列是否为光标移动指令,如果是,更新缓存中当前行列的位置;
52.如果不是光标移动指令,判断所述ansi序列是否为清屏移动指令,如果是清屏移动指令,从缓存中的当前行列对应的位置,对缓存内容进行复位;
53.如果不是光标移动指令,判断所述ansi序列是否为终端控制指令,如果是,基于ansi序列对应的指令内容修正缓存中的内容;
54.如果不是终端控制指令,丢弃当前ansi序列对应的字符。
55.作为优选,所述信息提取模块配置用于通过扫描的方法对最终命令执行结果数据进行分析,提取有效命令执行结果信息,并用于基于正则表达式以及分词方法对最终命令执行结果数据进行分析,提取有效命令执行结果信息。
56.本发明的基于虚拟终端的命令执行结果分析方法及系统具有以下优点:
57.1、实现了命令返回结果字符流的解析,剔除了控制符序列,还原了结果的本来样式,为以后处理打下了基础,满足了各种需求;
58.2、使用虚拟终端的方式解析字符流中的控制字符序列,还原了命令的执行结果,与从显示屏上看到的效果一致;
59.3、将命令的全部执行结果保存到缓存中,在缓存中重建了命令的完整结果。方便后续的其他处理。可以直接使用正则表达式精确的匹配命令结束符的位置,也能提取其他有用的信息。
附图说明
60.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
61.下面结合附图对本发明进一步说明。
62.图1为实施例1基于虚拟终端的命令执行结果分析方法的流程框图;
63.图2为实施例1基于虚拟终端的命令执行结果分析方法中co列表示意图;
64.图3-图4为实施例1基于虚拟终端的命令执行结果分析方法中ansi转义码示意图;
65.图5为实施例1基于虚拟终端的命令执行结果分析方法中数据流处理框图;
66.图6为实施例1实施例1基于虚拟终端的命令执行结果分析方法中基于 ansi序列的格式化处理流程框图。
具体实施方式
67.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
68.本发明实施例提供基于虚拟终端的命令执行结果分析方法及系统,用于解决如何对命令执行结果进行分析、去除无效字符,并处理命令间的数据依赖关系、有效提取有效数据的技术问题。
69.实施例1:
70.本发明基于虚拟终端的命令执行结果分析方法,如图1所示,该方法包括如下步骤:
71.s100、向目标设备发送命令后,在内存中创建虚拟终端窗口;
72.s200、将返回的命令执行结果数据追加至虚拟终端窗口中,命令执行结果数据包括文本字符和控制字符,控制字符包括ansi格式和vt100格式的字符;
73.s300、对命令执行结果数据进行解析筛选,去除控制字符并在内存中保留提取的文本字符,并基于控制字符对文本字符进行格式化处理,得到最终命令执行结果数据,最终命令执行结果数据还原了命令执行结果原本的格式和内容;
74.s400、对最终命令执行结果数据进行分析,提取有效命令执行结果信息。
75.终端也叫命令行,其中最为著名的终端就是vt100系列,现在能看到的 terminal软件都是终端设备的模拟器。在计算机系统中,ansi转义码(或转义序列)是一种使用带内信号控制视频文本终端的格式、颜色和其他输出选项的方法。ansi转义序列是一种带内信
号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以esc转义字符和"["字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。
[0076]
本实施例中,为了解析ansi转义码,需要在内存中分配一个固定行列的二维字符数组,作为存储可见文本字符的缓存,接收命令执行后回结果的原始字符流,剔除掉原始字符流中的ansi转义码,还原命令结果本来的格式和内容。
[0077]
字符流中的除了转义序列外还存在少数控制c0代码,通常是bel,bs, cr,lf,ff,tab,vt,so和si,这些也需要进行处理。序列具有不同的长度。所有序列都以ascii字符esc(十进制的27,或十六进制0x1b,或八进制的033,或转义字符\e)开头,第二个字节则是0x40

0x5f(ascii 的@a

z[]^_)范围内的字符。
[0078]
如图5所示,解析过程如下:
[0079]
对于命令执行结果数据对应的字符流,依次读取一个字符,对于每个字符,执行如下操作:
[0080]
(1)对于每个字符,判断当前字符是否大于31;
[0081]
(2)如果当前字符大于31,表示当前字符为文本字符,将当前字符存储至内存中;
[0082]
(3)如果当前字符小于31,表示当前字符为控制字符;
[0083]
(4)对于控制字符,判断当前字符是否为esc字符,所述esc字符为 absi序列的标志符;
[0084]
(5)如果当前字符为esc字符,表示当前字符为ansi序列,基于ansi 序列对缓存中文字字符进行格式化处理;
[0085]
(6)如果当前字符不是esc字符,判断当前字符是否为其它控制字符,所述其它控制字符包括回车、换行、退格和制表字符;
[0086]
(7)如果当前字符是其它控制字符,基于当前其它控制字符对缓存中文本字符进行格式化处理;
[0087]
(8)如果当前字符不是其它控制字符,丢弃读入的当前字符,并读取下一个字符。
[0088]
其中,步骤(2)将当前字符存储至内存中时,判断缓存中当前列是否为最大列,如果是,将当前文本字符在缓存中对应的位置为:行位置加1、列位置为0,如果当前列不是最大列,更新缓存中当前行和列的位置。
[0089]
ansi转义序列中以esc开头的叫作control sequence introducer简写为 csi。以csi开头的指令有很多,大致可分四类:光标移动指令、清屏指令、字符渲染(graphic rendition)指令和终端控制指令。处理字符流中的数据时,就是把缓存当做显示屏幕,一屏一屏的填充数据,最终组成完成命令结果。
[0090]
本实施例基于ansi序列对缓存中文字字符进行格式化处理,如图6所示,包括如下步骤:
[0091]
(1)读取一个ansi序列;
[0092]
(2)判断ansi序列是否为光标移动指令,如果是,更新缓存中当前行列的位置;
[0093]
(3)如果不是光标移动指令,判断所述ansi序列是否为清屏移动指令,如果是清屏移动指令,从缓存中的当前行列对应的位置,对缓存内容进行复位;
[0094]
(4)如果不是光标移动指令,判断所述ansi序列是否为终端控制指令,如果是,基
于ansi序列对应的指令内容修正缓存中的内容;
[0095]
(5)如果不是终端控制指令,丢弃当前ansi序列对应的字符。
[0096]
本实施例的方法将命令执行结果数据保存在内存的虚拟终端数据结构中,对ansi和vt100数据进行预处理,过滤掉无用的控制字符只保留有用的文本内容。因为在内存中缓存并重建了所有接收到内容,既能处理不存在命令结束符的情况,也能处理结果中多次出现结束符的情况,同时,也可以通过扫描已缓存的内容,使用查找算法提取关键内容,解决命令间的依赖关系。
[0097]
实施例2:
[0098]
本发明基于虚拟终端的命令执行结果分析系统,包括配置模块、读取模块、解析筛选模块以及信息提取模块,配置模块用于向目标设备发送命令后,在内存中创建虚拟终端窗口;读取模块用于将命令执行结果数据追加至虚拟终端窗口,所述命令执行结果数据包括文本字符和控制字符,所述控制字符包括ansi 格式和vt100格式的字符;解析筛选模块用于对命令执行结果数据进行解析筛选,去除控制字符并在内存中保留提取的文本字符,并基于控制字符对文本字符进行格式化处理,得到最终命令执行结果数据,所述最终命令执行结果数据还原了命令执行结果原本的格式和内容;信息提取模块用于对最终命令执行结果数据进行分析,提取有效命令执行结果信息。
[0099]
其中,配置模块用于在内存中分配一个固定行列的二维字符数组,所述二维字符数组作为存储文本字符的缓存。
[0100]
对于命令执行结果数据对应的字符流,解析筛选模块用于依次读取一个字符,对于每个字符,执行如下操作:
[0101]
(1)对于每个字符,判断当前字符是否大于31;
[0102]
(2)如果当前字符大于31,表示当前字符为文本字符,将当前字符存储至内存中;
[0103]
(3)如果当前字符小于31,表示当前字符为控制字符;
[0104]
(4)对于控制字符,判断当前字符是否为esc字符,所述esc字符为 absi序列的标志符;
[0105]
(5)如果当前字符为esc字符,表示当前字符为ansi序列,基于ansi 序列对缓存中文字字符进行格式化处理;
[0106]
(6)如果当前字符不是esc字符,判断当前字符是否为其它控制字符,所述其它控制字符包括回车、换行、退格和制表字符;
[0107]
(7)如果当前字符是其它控制字符,基于当前其它控制字符对缓存中文本字符进行格式化处理;
[0108]
(8)如果当前字符不是其它控制字符,丢弃读入的当前字符,并读取下一个字符。
[0109]
该解析筛选模块用于将当前字符存储至内存中时,判断缓存中当前列是否为最大列,如果是,将当前文本字符在缓存中对应的位置为:行位置加1、列位置为0,如果当前列不是最大列,更新缓存中当前行和列的位置。
[0110]
述ansi序列中,以esc字符作为标志符,包括光标移动指令、清屏指令、字符渲染指令以及终端控制指令。本实施例的解析筛选模块用于通过如下步骤、基于ansi序列对缓存中文字字符进行格式化处理:
[0111]
(1)读取一个ansi序列;
[0112]
(2)判断ansi序列是否为光标移动指令,如果是,更新缓存中当前行列的位置;
[0113]
(3)如果不是光标移动指令,判断所述ansi序列是否为清屏移动指令,如果是清屏移动指令,从缓存中的当前行列对应的位置,对缓存内容进行复位;
[0114]
(4)如果不是光标移动指令,判断所述ansi序列是否为终端控制指令,如果是,基于ansi序列对应的指令内容修正缓存中的内容;
[0115]
(5)如果不是终端控制指令,丢弃当前ansi序列对应的字符。
[0116]
本实施例的系统可执行实施例1公开的基于虚拟终端的命令执行结果分析方法。
[0117]
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献