4
public static void executeCommand(String cmd) {
    try {
        Process process = Runtime.getRuntime().exec(cmd, null,
                new File("/usr/hadoop-0.20.2/"));
        InputStream stdin = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(stdin);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.println("<output></output>");
        while ((line = br.readLine()) != null)
            System.out.println(line);
        InputStreamReader esr = new InputStreamReader(
                process.getErrorStream());
        BufferedReader errorReader = new BufferedReader(esr);
        String lineError;
        while ((lineError = errorReader.readLine()) != null)
            System.out.println(lineError);
        process.waitFor();
        System.out.println("");

    } catch (Exception e) {
        e.printStackTrace();
    }
}

「cmd」という名前のコマンドを実行するための私のコードは次のとおりです。しかし、このコードではリアルタイム出力を取得できません。コマンドが終了すると、出力が表示されます。リアルタイム出力が欲しい。これを行う方法はありますか?

4

3 に答える 3

3

説明する問題は、呼び出したアプリケーションが原因である可能性があります。多くのアプリケーションは、端末に接続するときにバッファなしのI / Oを使用しますが、パイプに接続するときにバッファリングするI/Oを使用します。したがって、cmd出力を小さなビットではなく、大きなチャンクで書き込むことを決定する場合があります。適切な修正は、コマンドを調整し、適切なタイミングでその出力をフラッシュすることです。Java側でこれについてできることはほとんどありません。この回答も参照してください。

于 2012-08-03T03:17:53.703 に答える
0

出力を処理するためのスレッドが必要だと思います。

しばらく実行するcmdを最初に試してみてください

前回、wvdialコマンドを試してみると(このwvdialは停止するまで終了しません)、wvdialの出力を読み取るためのスレッドが必要です。

于 2012-08-03T03:39:13.107 に答える