ProcessBuilder для выполнения пользовательского исполняемого файла - PullRequest
0 голосов
/ 28 сентября 2011

Хорошо, я пробовал дюжину разных способов, но безуспешно.Я хочу выполнить пользовательский исполняемый файл и получить вывод.Он работает нормально из командной строки.Я получаю "dir", чтобы работать нормально, но не custom.exe.Вот код:

  List<String> command = new ArrayList<String>();
  command.add("cmd");          // Even removed these two lines
  command.add("/c");           // aka hail mary coding.
  //command.add("dir");
  command.add("custom.exe");   // even tried "c://custom.exe"

  String line;
  Process p = new ProcessBuilder(command).start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }

Я не получаю вывод вообще.Если я помещаю его в командный файл, я получаю вывод.У меня такое ощущение, что это как-то связано с% PATH%.Вернемся к этому ...

РЕДАКТИРОВАТЬ -> Получается, что вывод этого пользовательского exe-файла идет с ошибкой, поэтому, чтобы увидеть, что происходит, у меня есть код:

  List<String> command = new ArrayList<String>();
  command.add(System.getenv("ProgramFiles(x86)") + "\\mydir\\custom.exe";

  String line;
  ProcessBuilder pb = new ProcessBuilder(command);
  pb.redirectErrorStream(true);
  Process p = pb.start();
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
  while ((line = input.readLine()) != null) {
    System.out.println(line);
  }

И это работает как черт.:)

1 Ответ

2 голосов
/ 28 сентября 2011

Вам не нужны строки

command.add("cmd");
command.add("/c");

Это потребуется только для командного файла.Я бы предпочел указать полный путь к исполняемому файлу.

Может быть, вывод на stderr?Попробуйте заменить p.getInputStream() на p.getErrorStream().

...