Linux サーバー上のいくつかのジョブを自動化するために ExpectJ Java ライブラリを使用してきましたが、今度は実行ごとに異なるテキスト応答を送信するジョブを自動化する必要があります。出力は次のとおりです。
Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012
********************************************************************************
********************************************************************************
[YOU HAVE NEW MAIL]
local-login [/home/user]%
私のコードには次の内容が含まれています:
s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");
表示された出力を受け取りましたが、最後の回答の読み方がわからないため、次のコマンドを送信できませんでした。正規表現を使用しようとしましたが、機能しません。
答え1
先行するバナー テキストは処理する必要はありません。Expect は、条件の 1 つが満たされるまで待機します (文字列/正規表現の一致またはタイムアウトなど)。その前のテキストは、後で使用するためにバッファリングされますが、一致の一部ではありません。処理する必要があるのは、プロンプト文字列を探すことです。プロンプト文字列local-login [/home/user]%
がどのように表示されるかがわかっている場合 (たとえば、には常に '[' ディレクトリ ']%' が含まれます)、それに一致する正規表現を記述できます。
.*\[(/[^/]+)+\]%
出力には改行/復帰が含まれないため、正規表現に改行/復帰が含まれていないことを確認してください。
答え2
正規表現を使ってマッチさせることはできないと思います期待J。
そうみたいですString.indexOf
彼らがマッチを見つけるために頼っているように
if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)
ここでpattern
、期待される指定された文字列です。
したがって、代わりに部分文字列を一致させてみて、それがより適切に機能するかどうかを確認してください。