论坛: 公开讨论 (Thread #27293)

実行コマンドの結果解析 (2010-09-08 19:48 by (del#24082) #52812)

ちょっと業務でハマっていたので、教えてください。
やりたいことは以下のとおりです。

 目的:コマンドを実行して、その実行結果(一行)を受信し、その内容を解析する。
 コマンド名: dotest
 実行結果例: 0000: 01020304 06070809 ; foo

ようするに、"dotest"プログラムを実行して、その結果が1つの行で返ってくるので、その内容を加工したい、ということです。そのためには、実行結果をいったんバッファに格納する必要があります。

こうした用途を達成したい場合、どのようにマクロを記述するのが適切でしょうか?

1.recvlnを使う

flushrecv
sendln 'dotest'
recvln
messagebox inputstr 'recvln'

 たとえば、recvlnを使い、上記のように書くと、おおむねは期待通りに動作するのですが、まれに受信に失敗することがあります。recvlnは改行コード(0x0a)で判断するので、sendlnでコマンドを送り、コマンド名がエコーバックされたときの改行を拾う場合があるのかと思っています。

2.waitregexを使う

sendln 'dotest'
waitregex '0000: .*\n'
messagebox inputstr 'recvln'

 正規表現を使って、コマンド投入後、一行データを待つというふうにすると、これもだいたい動くのですが、まれに waitregex がいつまでも返ってこない(永遠に待っている)ことがあります。


もっとスマートなやりかたがあれば、ご教示願います。