如何操纵期望缓冲区

时间:2014-03-24 04:51:58

标签: tcl expect

我在Tcl-Expect中编写了一个应用程序,它可以生成minicom和 通过串口发送和接收数据。有时我看到了 应用程序接收控制字符以及人类可读数据。 在互联网上搜索告诉我控制字符是 除了VT终端代码。但是我找不到解决方案 过滤掉终端代码。

我附加了预期缓冲区和实际缓冲区的样本。

预期: -

Microsoft Windows [Version 6.2.9200](c) 2012 Microsoft Corporation. All rights reserved. C:\Windows\system32>

实际: -

[1;1H[37m[40m [2;1H [3;1H [4;1H [5;1H [6;1H [7;1H [8;1H [9;1H [10;1H [11;1H [12;1H [13;1H [14;1H [15;1H [16;1H [17;1H [18;1H [19;1H [20;1H [21;1H [22;1H [23;1H [24;1H [1;1HMicrosoft Windows [Version 6.2.9200][2;1H(c) 2012 Microsoft Corporation. All rights reserved.[4;1HC:Windowssystem32>

1 个答案:

答案 0 :(得分:1)

在进行初始匹配时,您不希望过滤掉它们;它们对确保您获得您想要的内容(提示/横幅)非常有用。但是,当你提取感觉时,你肯定想要先将它们过滤掉。幸运的是,使用regsub魔法很容易:

regsub -all {\u00AB\[[\d;]*[A-Za-z]} $expect_out(buffer) "" filtered

替换所有转义序列(ESC(\u00AB)后跟一个括号,任意数量的数字和分号,以及一个字母)在Expect匹配缓冲区中(如果你有更好的候选者,选择其他的东西)空字符串,然后将结果存储在filtered变量中。