2015-10-20 3 views
1

Я хочу запустить C++-программу exe с текстовым вводом и выводом, но как-то processbuilder возвращает 255 и не выводит результаты на вывод txt.Java Processbuilder возвращает 255

public static void runCommandPrompt(String[] cmds) { 
    ProcessBuilder compileProcessBuilder = new ProcessBuilder(cmds); 
    Process compileProcess = null; 
    try { 
     compileProcess = compileProcessBuilder.start(); 
     int exitValue = compileProcess.waitFor(); 
     System.out.println(exitValue); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 



public static void main(String[] args){ 
    String[] evaluateCommands = { "cmd", 
       "/c", 
       "cd C:\\TestPath & select.exe <C:\\input.txt >C:\\output.txt" }; 
    runCommandPrompt(evaluateCommands); 
} 

ответ

3

Попробуйте перенаправить все выходные данные дочернего процесса на главный процесс. Я считаю, что вы увидите причину ошибки.

ProcessBuilder compileProcessBuilder = new ProcessBuilder(cmds); 

// redirect all IO separately 
compileProcessBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT); 
compileProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 
compileProcessBuilder.redirectError(ProcessBuilder.Redirect.INHERIT); 

// or use a convenient call for all at once (thanks VGR to mention it) 
compileProcessBuilder.inheritIO(); 

Process compileProcess = compileProcessBuilder.start(); 

обновление

Что делать обратный процесс, если запустить их вручную? Возможно, они действительно возвращают эти коды выхода.

run.cmd

select.exe <C:\input.txt >C:\output.txt 
echo %ERRORLEVEL% 
+1

Вы также можете сделать это с помощью одного вызова метода:. CompileProcessBuilder [inheritIO()] (http://docs.oracle.com/javase/8/docs/api /java/lang/ProcessBuilder.html#inheritIO--) – VGR

+0

@VGR Вы правы. Я только хотел показать вербальную версию. Я вложил ваш комментарий в ответ. Это хорошее дополнение. – SubOptimal

+0

Спасибо, что помогли. Но у меня другая проблема. Я ТА Лекция C++. Поэтому старайтесь автоматически компилировать и тестировать результаты. Поэтому я решил написать программу на Java. Программа получает домашнюю папку. Затем зайдите в папку студента, он вызывает cl-компилятор и создает exe. После того, как программа пробует тест, но есть проблема. Программа запускает exe in for loop foreach, но некоторые процессы возвращаются правильно, но некоторые процессы терпят неудачу и возвращают 255 или -1073741819. Я не понимаю, почему не удается выполнить одни и те же команды для некоторых exes и не подводит других. Когда я использовал ваше решение, проблема все еще существует – Yunus

Смежные вопросы