запуск скриптов через обработчик процессов - PullRequest
5 голосов
/ 10 января 2011

Я пытаюсь запустить скрипты Python, Ruby, C, C ++ и Java из Java-программы, и мне был предложен Processbuilder в качестве хорошего способа запуска скриптов. Из того, что я понимаю, Processbuilder в основном запускает собственные файлы (.exe на windows и т. Д.). Тем не менее, я слышал несколько вещей о запуске файлов сценариев (неродных) с помощью Processbuilder. К сожалению, все, что я нахожу по этому вопросу, невероятно расплывчато.

Если бы кто-то мог разъяснить способ запуска неродных сценариев, таких как Python, Ruby и т. Д., Я был бы очень признателен!

Ответы [ 2 ]

6 голосов
/ 10 января 2011

Вы можете проверить документацию ProcessBuilder в Sunoracle , но в основном вы можете запустить интерпретатор для языка сценариев и передать ему скрипт, который хотите запустить.

Например, допустим, у вас есть скрипт в /home/myuser/py_script.py, а python в /usr/bin/

class ProcessRunner
{
    public static void main(String [] args)
    {
        ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", "/home/myuser/py_script.py");
        Process p = pb.start();
    }
}

Чрезвычайно простой пример, вы можете привыкнуть к изменению рабочего каталога и изменению среды.

Вы также можете создать ProcessBuilder с массивом String или подтипом List<String>. Первым элементом в списке должна быть программа / исполняемый файл, который вы хотите запустить, а все следующие элементы являются аргументами программы.

String pbCommand[] = { "/usr/bin/python", "/home/myuser/py_script.py" };
ProcessBuilder pb = new ProcessBuilder(pbCommand);
Process p = pb.start();
0 голосов
/ 14 апреля 2015

Чтобы не вводить вручную все местоположение скрипта, что также может привести к проблемам с переносимостью, вот что я сделал:

String pwd = System.getProperty("user.dir");

ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", pwd+'/'+scriptName, arg1, arg2);
Process p = pb.start();
...