关于Expect中的expect_out(缓冲区)

时间:2013-09-21 06:44:00

标签: tcl expect

任何人都可以解释

之间的区别
expect_out(buffer)

expect_out(0,string)

通常我更喜欢使用expect_out(buffer)

第二个是什么,我们什么时候可以使用它?

请问任何人解释一下吗?

1 个答案:

答案 0 :(得分:7)

您可能需要查看manpage

我将引用相关部分:

  

匹配模式(或eof或full_buffer)后,任何匹配且先前不匹配的输出将保存在变量expect_out(buffer) 中。最多9个regexp子串匹配保存在变量expect_out(1,string)expect_out(9,string)中。如果在模式之前使用-indices标志,则10个字符串的起始和结束索引(以适合lrange的形式)存储在变量expect_out(X,start)和{{1}中其中X是一个数字,对应于缓冲区中的子字符串位置。 0表示与整个模式匹配的字符串,为glob模式和regexp模式生成。例如,如果某个流程已生成expect_out(X,end)的输出,则结果为:  

expect "cd"

     

就好像执行了以下语句:  

set expect_out(0,string) cd
set expect_out(buffer) abcd

     

"abcdefgh\n"保留在输出缓冲区中。如果进程生成了输出"efgh\n",则结果为:  

expect -indices -re "b(b*).*(k+)"

     

就好像执行了以下语句:  

set expect_out(0,start) 1
set expect_out(0,end) 10
set expect_out(0,string) bbbcabkkkk
set expect_out(1,start) 2
set expect_out(1,end) 3
set expect_out(1,string) bb
set expect_out(2,start) 10
set expect_out(2,end) 10
set expect_out(2,string) k
set expect_out(buffer) abbbcabkkkk

您可以看到"abbbcabkkkka\n"expect_out(0,string)包含不同字符串的方式。