Как выполнить скрипт модели Pyomo внутри Spring? - PullRequest
1 голос
/ 21 января 2020

У меня есть веб-интерфейс, созданный с помощью Spring, и я хочу выполнить из него команду "python file.py".
Основная проблема заключается в том, что внутри файла file.py есть модель pyomo, которая должна давать некоторый вывод. Я могу выполнить скрипт python, если это простая печать или что-то в этом роде, но модель pyomo полностью игнорируется.

В чем может быть причина?

Вот код, который я написал в контроллере для выполнения вызова:

 @PostMapping("/execute")
    public void execute(@ModelAttribute("component") @Valid Component component, BindingResult result, Model model) {

        Process process = null;
        //System.out.println("starting!");
        try {
            process = Runtime.getRuntime().exec("python /home/chiara/Documents/GitHub/Pyomo/Solver/test/sample.py");
            //System.out.println("here!");
        } catch (Exception e) {
            System.out.println("Exception Raised" + e.toString());
        }
        InputStream stdout = process.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(stdout, StandardCharsets.UTF_8));
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                System.out.println("stdout: " + line);
            }
        } catch (IOException e) {
            System.out.println("Exception in reading output" + e.toString());
        }
    }

1 Ответ

0 голосов
/ 23 января 2020

Обновление: я обнаружил, что мне не хватало того, что я не проверял, где выполняется код.
Так что обязательно сделайте это и в конечном итоге переместите входные файлы (если они у вас есть) в каталог, где python выполняется, иначе скрипт не сможет их найти и разработать.

Вы можете использовать

cwd = os.getcwd()

, чтобы проверить текущий рабочий каталог процесса. Другой возможностью является перенаправление stderr на терминал или в файл журнала, потому что с терминала сервера вы ничего не увидите, даже если есть ошибки.

Код, размещенный в вопросе, - это правильный способ вызова команды bash из java.

...