6

.bat ファイルを実行して出力を取得しようとしています。実行できますが、Java で結果を取得できません。

String cmd = "cmd /c start C:\\workspace\\temp.bat";

Runtime r = Runtime.getRuntime();
Process pr = r.exec(cmd);

BufferedReader stdInput = new BufferedReader(
    new InputStreamReader( pr.getInputStream() ));

String s ;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}

結果はnullです。なぜ私がこれを得るのかわからない。Windows 7を使用していることに注意してください。

4

3 に答える 3

5

「cmd /c start [...]」を使用してバッチ ファイルを実行すると、バッチ ファイルを直接実行する代わりに、サブ プロセスが作成されます。

したがって、その出力にアクセスすることはできません。それを機能させるには、次を使用する必要があります。

String cmd = "C:\\workspace\\temp.bat";

Windows XP で動作します。

于 2013-06-12T09:21:08.583 に答える
4

を呼び出した後、端末出力ストリームを読み取ってコンソールにコピーする新しいスレッドを開始する必要がありますprocess.waitFor()

次のようにします。

String line;
Process p = Runtime.getRuntime().exec(...);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
    System.out.println(line);
}
input.close();

より良いアプローチは、ProcessBuilderクラスを使用して、次のようなものを書いてみることです。

ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectInput();
Process process = builder.start();

while ((line = reader.readLine ()) != null) {
    System.out.println ("Stdout: " + line);
}
于 2013-06-12T08:49:46.550 に答える
-1
BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getErrorStream() ));

代わりに使用

BufferedReader stdInput = new BufferedReader(new 
 InputStreamReader( pr.getInputStream ));
于 2013-06-12T08:56:13.580 に答える