JAVAはshellスクリプトを実行し、出力をリアルタイムで取得する
5712 ワード
個人ブログ原文アドレス:http://www.ltang.me/2016/10/23/java-call-shell/
ドキュメント・サイトを作成する前に、オンライン・デプロイメント・ページを作成する必要がありました.ページ上のポイントをクリックすると、リモート・サーバ上のサービスが自動的にデプロイメントされ、デプロイメント・ログが表示されます.簡単な考え方は、ページがwebsocketを通じてjavaバックグラウンドに接続され、javaコードがshellスクリプトを呼び出してパブリッシュ操作を実行し、出力を取得し、websocketを通じて出力内容をページに戻すことです.
ドキュメント・サイトを作成する前に、オンライン・デプロイメント・ページを作成する必要がありました.ページ上のポイントをクリックすると、リモート・サーバ上のサービスが自動的にデプロイメントされ、デプロイメント・ログが表示されます.簡単な考え方は、ページがwebsocketを通じてjavaバックグラウンドに接続され、javaコードがshellスクリプトを呼び出してパブリッシュ操作を実行し、出力を取得し、websocketを通じて出力内容をページに戻すことです.
Runtime runtime = Runtime.getRuntime();
Process process;
BufferedReader br = null;
BufferedWriter wr = null;
try {
process = runtime.exec("// ");
br = new BufferedReader(new InputStreamReader(process.getInputStream()));
wr = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
String inline;
while ((inline = br.readLine()) != null) {
if (!inline.equals("")) {
inline = inline.replaceAll(", "<").replaceAll(">", ">");
session.getBasicRemote().sendText(inline); //
if (inline.endsWith(" ?[Y/N]:")) {
wr.write("y"); // y
wr.newLine();
wr.flush();
session.getBasicRemote().sendText("y");
}
} else {
session.getBasicRemote().sendText("
"); //
}
}
br.close();
br = new BufferedReader(new InputStreamReader(process.getErrorStream())); //
while ((inline = br.readLine()) != null) {
if (!inline.equals(""))
session.getBasicRemote().sendText("" + inline + "");
else
session.getBasicRemote().sendText("
");
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
session.getBasicRemote().sendText("" + e.getMessage() + "");
} finally {
if (br != null)
br.close();
if (wr != null)
wr.close();
session.getBasicRemote().sendText("End.");
}