cisco any connect Mobility Client である外部アプリケーションの使用を自動化する小さなアプリケーションを作成しようとしています。VPN への接続に使用できるコマンド ライン ツールを提供します。
apache commons-exec ライブラリを使用して Java アプリケーションからこのコマンド ライン ツールを実行し、その出力を読み取って必要な情報を送信できるようにしたいと考えています。
すでにネットで検索して、外部アプリケーションとの「通信方法」を見つけましたが、見つけた唯一の投稿は次の記事でした: Apache Commons Exec を使用して複数の入力をコマンドに提供し、「ちょっと見つけたソリューション」ですが、彼がどのようにそれを行ったのかわかりません。
プロセスを開始すると、次のように入力を読み取る関数を実行します。
Thread T = new Thread() {
public void run() {
String line;
try {
line = processOutput.readLine();
while (line != null) {
System.out.println(line);
if(line.contains("VPN-Password")){
sendMessage(processInput, "1");
}
if(line.contains("Please enter your username and password")){
sendMessage(processInput, "username");
}
line = processOutput.readLine();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
T.start();
関数送信メッセージは、スレッドを実行してプロセス入力ストリームに書き込み、それをフラッシュします。
Thread T = new Thread() {
public void run() {
try {
os.write((message+"\n").getBytes());
os.flush();
System.out.println("SENT : "+message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
T.start();
ご覧のとおり、出力をチェックして、それに応じてプロセスにメッセージを送信します (基本的には質問に答えるために)。ただし、「入力してください...」になると、この例外が発生しました
java.io.IOException: Read end dead
私の問題は、プロセスの出力を読んで、プロセスの内容に応じてメッセージを送信することで、プロセスと「通信」する方法が見つからないことです。
手伝って頂けますか ?
読んでくれてありがとう。