2014-05-06 45 views
0

我有一个希望会话看起来与此类似:如何匹配输出跨越几行

spawn myapp 
stratos> list-tenants 
Available Tenants: 
+-----------+-----------+-------------+--------+---------------------------+ 
| Domain | Tenant ID | Email  | State | Created Date    | 
+-----------+-----------+-------------+--------+---------------------------+ 
| frank.com | 1   | [email protected] | Active | 2014-02-26T11:33:23+05:30 | 
+-----------+-----------+-------------+--------+---------------------------+ 

stratos> 

流程大致是:

  1. 应用输出的Stratos>
  2. 的用户输入清单租户
  3. 应用输出可用承租人:与上面示例中显示的表。

我该如何与预期的步骤3的输出相匹配?即我需要替换什么,下面?

请注意,期望脚本是应用程序调用的模拟服务生成的输出的测试的一部分,因此我期望逐字匹配整个输出。

expect "stratos>" 
send "list-tenants\r" 
expect { 
    ????   { exp_continue; } 
    timeout  { puts stderr "Expect could not match 'Available Tenants:'"; exit 1; } 
} 

非常感谢。

回答

1

试试这个:(未经测试)

spawn myapp 
set prompt_re {stratos> $} 

expect -re $prompt_re 
send -- "list-tenants\r" 
expect { 
    timeout {error "could not match available tenants"} 
    -re "list-tenants(.+)$prompt_re" 
} 
set available_tenants [string trim $expect_out(1,string)]