Команда выполнена из терминала, сбой Java с использованием ProcessBuilder - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь выполнить команду в моем терминале. Проблема в том, что когда я выполняю команду в терминале, она успешно выполняется, но когда я запускаю команду из Java, команда выполняется, но я получаю сообщение об ошибке, показывающее, что какой-то модуль python отсутствует.

try{

        String[] list = { "python3", "script.py" };
        ProcessBuilder pb = new ProcessBuilder(list);
        pb.directory(
                new File("/home/script"));
        System.out.println("" + pb.directory());
        Process process = pb.start();
        InputStream str = process.getErrorStream();
        InputStreamReader isr = new InputStreamReader(str);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.printf("Output of running %s is:", Arrays.toString(args));
        while ((line = br.readLine()) != null) {
            System.out.println(line);}
        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String ret = in.readLine();
        System.out.println("value is : "+ret);
        process.waitFor();
        process.destroy();

    }catch (Exception ex) {
        ex.printStackTrace();
    }

Сообщение об ошибке:

/home/script
Output of running [] is:Traceback (most recent call last):
  File "scraper.py", line 8, in <module>
    from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'
value is : null

PS: Когда я выполняю команду непосредственно с терминала, все работает хорошо, я не получаю ошибку отсутствующего модуля.

1 Ответ

3 голосов
/ 18 июня 2019

Подобно Java, python позволяет импортировать другие вещи. Это сообщение говорит вам, что ваш скрипт на python хочет использовать модуль selenium, но не может его найти.

Скорее всего, у вас есть специальная настройка ENV var при запуске команд вручную в оболочке / консоли. Поэтому проверьте ваш .bashrc или .initrc или что-то еще, что определяет ваши переменные ENV В Unix-системе ввод команды env может также показать все настройки. Просто проверьте, настроен ли env var PYTHONPATH.

Поскольку этот вызов работает из командной строки, то наверняка модуль установлен в вашей системе. Ваша единственная проблема в том, что python не может найти его, когда вы вызываете этот скрипт через Java ProcessBuilder!

Одним из решений может быть то, что вы "вручную" настраиваете PYTHONPATH из своего скрипта. Таким образом: определите правильную настройку для PYTHONPATH, затем обновите ваш скрипт, чтобы «поступать правильно».

Подробнее см. В документации по питону !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...