2016-04-25 7 views
1

私はCLIからのいくつかの出力を解析し、それを反復しようとしています。出力は次のようなものです。これらのオブジェクトでさらに多くのことをするために各IDを繰り返し処理したいと思います。いくつかの期待される行を反復する方法

OVM>リストServerPool
コマンド:リストServerPool
ステータス:成功
データ:
ID:123456789名:プール1
ID:987654321名:POOL2

私がしようとしていました次のコードが何らかの理由で2番目のIDを印刷した後にハングします。私はそれがexp_continueと関係があると思うが、私はあまりにもうまくいくとは理解していない。また、私は、2つのidだけを持つ場合には、この簡単な解決策をやっています。なぜなら、一般化して一度にいくつかの行を取得して、後でそれらを反復し、より多くのコマンドを送信する方法がわからないからです。

2番目のIDが印刷された後に出口を追加しようとしましたが、役に立たなかったため、予想し続けるようにしてそこにハングアップするようです。私はその時点でexp_continueをどのように取り消すのか分かりません。

expect "OVM> " { 
    send "list ServerPool\r" 
    expect { 
     -re " id:(.*?) (.*?)\n\r" { 
      send_user "$expect_out(1,string)\n"; exp_continue 
     } 
     -re " id:(.*?) (.*?)\n\r" { 
      send_user "\n$expect_out(1,string)\n"; 
     } 
    } 
} 

send "exit\r" 
expect eof 
+0

は、なぜあなたは二度同じ正規表現を持っているのですか?期待どおりのルーチンから抜け出すためにタイムアウトを追加することができます。 – Ashish

+0

IDは、一度に1つずつ、または一度に1つずつ(最初のIDを受信したコマンド・ポストを送信した後)のどちらですか? – Sharad

+0

IDのリストが一度に来ます。ご存知のように、私が1つだけを使用すると、最初のIDだけが必要になります。配列のようなIDのリストを取得し、後でループで使用して、必要な他のコマンドを送信する方法を知りたい。 – Nocturn

答えて

1

次の例を参照してください:

% cat foo.exp 
spawn -noecho cat file 

set idNames {} 
expect { 
    -re {id:([0-9]+) name:([[:alnum:]]+)} { 
     set idName [list $expect_out(1,string) $expect_out(2,string)] 
     lappend idNames $idName 
     exp_continue 
    } 
    "OVM>" {} 
} 

send_user "==== result: ====\n" 
foreach idName $idNames { 
    lassign $idName id name 
    send_user "id=$id name=$name\n" 
} 
% cat file 
OVM> list ServerPool 
Command: list ServerPool 
Status: Success 
Data: 
id:123456789 name:pool1 
id:234567890 name:pool2 
id:345678901 name:pool3 
id:456789012 name:pool4 
id:56789name:pool5 
id:6789name:pool6 
OVM> other command 
% expect foo.exp 
OVM> list ServerPool 
Command: list ServerPool 
Status: Success 
Data: 
id:123456789 name:pool1 
id:234567890 name:pool2 
id:345678901 name:pool3 
id:456789012 name:pool4 
id:56789name:pool5 
id:6789name:pool6 
OVM> other command 
==== result: ==== 
id=123456789 name=pool1 
id=234567890 name=pool2 
id=345678901 name=pool3 
id=456789012 name=pool4 
id=56789name=pool5 
id=6789name=pool6 
% 
関連する問題