Я пытаюсь запустить команду из java, чтобы запустить файл Python (который я также создал в своем коде) с файлом тестового примера в качестве входа и перенаправить его вывод в другой файл .txt.Команда выглядит так: python < testCase1.txt > output.txt file.py
И я пробовал также с абсолютным путем python < /home/mateus/IdeaProjects/coyote/testCase1.txt > /home/mateus/IdeaProjects/coyote/output.txt /home/mateus/IdeaProjects/coyote/file.py
Проблема, с которой я сталкиваюсь: после запуска этой команды с использованием ProcessBuilder вывод кода Python не перенаправляетсяв файл output.txt.Если я правильно запускаю из терминала Unix, он работает очень хорошо.
Я уже пробовал с Runtime.Exec () и ProcessBuilder.Я попытался использовать process.getInputStream (), но так как команда не возвращает информацию о терминале, она не работает.
public boolean runSourceCode() throws IOException {
// creating py file
Files.write( Paths.get(this.nameFile) , this.sourceCode.getBytes());
// Creating the processbuilder
Process p = new ProcessBuilder("python", String.format("< %s > %s %s", "./testCase1.txt", "./output.txt", String.format("./"+this.nameFile)) ).start();
}
РЕДАКТИРОВАТЬ 1 Итак, я исправился, что мне нужно сделать, это:
// running python
ProcessBuilder p = new ProcessBuilder("python3" , namePyFile);
p.redirectInput(new File( TestFiles.get(i) ) );
p.redirectOutput(new File(saidaFileName));
p.start().waitFor();
Также необходимо использовать `` `throws InterruptedException`` после подписи метода, потому что мы используем метод waitFor (), который будет ожидать запуска процесса.