Как мне выполнить исполняемый файл из файла Java на Linux? - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь выполнить исполняемый файл и Perl-скрипт из Java-программы.Я нашел много тем, похожих на эту, но большинство из них относятся к окнам.Я знаю, что Java независима от платформы и должна работать в любом случае, но это не так.Решение, которое я уже пробовал, основано на java Runtime и его методе exec.Он отлично работает на Windows, но так как я переношу свою программу на Linux, мне нужно ее адаптировать.Как я уже сказал, мне нужно выполнить исполняемый файл, который я скомпилировал и был написан на c ++, который выглядит так, как будто он работает, но он завершает выполнение со значением выхода 1. Я понятия не имею, что это значит, но в окнах он выходит с 0и так должно быть и на Linux (?!?!).Жемчужный сценарий, с другой стороны, не запускается вообще.Я использую команду "perl script.pl", и она выходит со значением 255. Само собой разумеется, она не делает то, что должна.

Кто-нибудь знает другой способ выполнения этих файлов?Или, может быть, где я не прав с моей реализацией?

вот код, если вы хотите взглянуть на него: Это тот, что для сценария perl

public static void main(String[] args){
    System.out.println("Starting");
    try{
        String[] cmd = {"perl", "cloc-1.53.pl"};
        Process pr = Runtime.getRuntime().exec(cmd);
        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line=null;

        while((line=input.readLine()) != null) {
            System.out.println(line);
        }

        int exitVal = pr.waitFor();
        System.out.println("Exit code: " + exitVal);
    } catch (Throwable t){
        t.printStackTrace();
    }
}

Для скомпилированного файлаЯ изменяю это:

String[] cmd = {"perl", "cloc-1.53.pl"};

с:

String cmd = "./UCC";

1 Ответ

1 голос
/ 31 августа 2011

Не должно быть различий в начальных процессах в Windows и Linux.

Хорошая статья http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html Это по-старому, но дает хорошее понимание.

Преобразование статьи вновый способ:

Из Runtime.exec () в ProcessBuilder

...