Вывод процесса перенаправления к stdout

Если на поле окон быстрый и грязный slution является CVSNT. Простой в использовании просто настраивает его, и работает очень хорошо.

я сам предпочитаю SVN, но это - хорошее для быстрого использования.

24
задан om-nom-nom 30 May 2013 в 10:27
поделиться

3 ответа

Здесь используется класс, который считывает весь вывод, генерируемый исполняемой программой, и отображает его в собственном стандартном выводе.

class StreamGobbler extends Thread {
    InputStream is;

    // reads everything from is until empty. 
    StreamGobbler(InputStream is) {
        this.is = is;
    }

    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line=null;
            while ( (line = br.readLine()) != null)
                System.out.println(line);    
        } catch (IOException ioe) {
            ioe.printStackTrace();  
        }
    }
}

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
//output both stdout and stderr data from proc to stdout of this process
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream());
errorGobbler.start();
outputGobbler.start();
proc.waitFor();
33
ответ дан 28 November 2019 в 22:10
поделиться

Вот что-нибудь попроще, если вы просто пытаетесь получить вывод простой команды. Вам нужно будет использовать потоки, такие как jitter, если вы хотите обрабатывать параллельно или если ваша команда принимает stdin или генерирует stderr.

Используйте буферизованную копию (например, this ), если вы получаете много вывода.

import java.io.*;
public class test {
  static void copy(InputStream in, OutputStream out) throws IOException {
    while (true) {
      int c = in.read();
      if (c == -1) break;
      out.write((char)c);
    }
  }

  public static void main(String[] args) throws IOException, InterruptedException {
    String cmd = "echo foo";
    Process p = Runtime.getRuntime().exec(cmd);
    copy(p.getInputStream(), System.out);
    p.waitFor();
  }
}
4
ответ дан 28 November 2019 в 22:10
поделиться

The following Groovy code will execute foo.bat and send the output to stdout:

println "foo.bat".execute().text
4
ответ дан 28 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: