04 12 2004 Tweet
Fortranとかの(昔のヒトが作った)プログラムだと嫌がらせのように対話を求めてきたりするが、そういったプログラムほどルーチンでマワシタカッタリします。
しょうがないからexpectでスクリプト書くかなぁとググるとautoexpectなるものを発見。
autoexpectは、あなたとプログラムとの対話を監視し、その対話を再現するExpectスクリプトを生成する。直線的なスクリプトなので、スクリプトを手作業で書くのに比べ相当な時間を節約できる。たとえあなたがExpectのエキスパートだとしても、対話のより機械的な部分を自動化するためにautoexpectを使うと便利であることが分かるだろう。 autoexpectの生成したスクリプトの一部をカットアンドペーストした方がゼロから書き始めるよりとても簡単である。そしてもしあなたが初心者だとしたら、Expectについて何も知らなくても autoexpectの起動方法を習うだけで用が足りるかもしれない。
MO計算とかのインプットは結構ごちゃごちゃしていて、初心者でもとっつきやすいように、対話式でインプット作成できるようなものが用意されているが、数百から数千の化合物をまわしたい場合には毎回選んでリターンを押しての繰り返しが面倒だったりする。テンプレ用意して読み込むようにソース変更してコンパイルすればいいじゃんみたいな話もあるんだけど、やっぱちょっと面倒だ。
というわけで、
# autoexpect -f file_name command
で記録されて、そのままexpectのスクリプトとして使えるんで、"expect -exact"の部分を適当に削って使う。 実行ログは標準出力に出てくるので適当にファイルで受ける。
さらに、これをperlで呼び出して、エラーを解釈するルーチンを組み込めば、作った本人はかなり楽が出来るヨ。