JAVAはshellスクリプトを実行し、出力をリアルタイムで取得する

5712 ワード

個人ブログ原文アドレス:http://www.ltang.me/2016/10/23/java-call-shell/
ドキュメント・サイトを作成する前に、オンライン・デプロイメント・ページを作成する必要がありました.ページ上のポイントをクリックすると、リモート・サーバ上のサービスが自動的にデプロイメントされ、デプロイメント・ログが表示されます.簡単な考え方は、ページが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."); }