Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Выполнение системной команды


Автор: korob2001 23.9.2005, 02:34
Привет!!!
Мне нужно запустить Perl программу из Java как отдельный процесс, подскажите как это реализовать. Другими словами мне нужно выполнить системную команду, т.е. вызвать сам Perl и в качестве параметра передать ему имя файла, который тот должен выполнить. Вобщем в Perl это делается таким образом:
Код

#!/usr/bin/perl
system("perl myfile.pl");

Я так понимаю в Java для подобных вещей есть классы Runtime и Process из пакета java.lang. Пробую это сделать так:
Код

import java.io.PrintWriter;

public class ExecDemo
{
    public static void main(String[] args)
    {
        PrintWriter stdout = new PrintWriter(System.out, true);
        Runtime r = Runtime.getRuntime();
        Process p = null;
        // Параметры, которые нужно предать на вход, в данном
        // случае имя файла, который нужно выполнить.
        String[] param = {"myfile.pl"};  
        
        try {
            p = r.exec("perl", param);  // Запускаем процесс
            p.waitFor();                // Ожидаем завершения процесса
        } catch (Exception e) {
            stdout.println("Runtime error");
        }
        stdout.println("Perl programm is enden with code: " + p.exitValue());
        stdout.close();
    }
}

Эта программа успешно компилируется, но она подвисает при выполнении, причем из "Диспетчера задач" видно, что она запускает программу на Perl. Помоему я здесь что-то не то намутил с параметрами. Пробовал передать параметр и таким образом:
Код

p = r.exec("perl myfile.pl");

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

Или я что-то недопонял? smile
Спасибо.

Автор: Dancer 23.9.2005, 06:55
если под виндами, то посмотри в сторону команды start (help start)
я точно сечас не вспомню, но должно получиться что-то вроде такого p = r.exec("start /Dpath "C:\HOME\perl_program" /WAIT perl myfile.pl");

Автор: Zandr 23.9.2005, 07:43
Осваиваем тигру, смотрим в сторону java.lang.ProcessBuilder.

Автор: korob2001 23.9.2005, 08:10
Не понял, что-то я не могу найти в документации такого класса.

Автор: batigoal 23.9.2005, 08:17
Дока на 5.0?

Автор: LSD 23.9.2005, 09:18
korob2001 ты вот http://vingrad.ru/JAVA-JAV-002924 статью смотрел?
Добавлено @ 09:19
Цитата(korob2001 @ 23.9.2005, 03:34)
По идее должно было бы открыться новое окно командной строки, затем программа отрабатывает и завершается, после чего Java программа завершает свою работу.

Все так за исключением того, что новое окно открыться не должно.

Автор: korob2001 26.9.2005, 10:33
Спасибо всем, сейчас почитаю статью. Извините за такую позднюю реакцию. smile

Автор: Zandr 27.9.2005, 05:22
korob2001, Lamer George, Блин, еще раз:
Цитата
Осваиваем тигру, смот....

smile

Автор: batigoal 27.9.2005, 07:56
Ну дык я это и уточнял у Короба. Может, человек не знает, что Тигра - это пятая JDK.

Автор: korob2001 27.9.2005, 23:45
Цитата

Ну дык я это и уточнял у Короба. Может, человек не знает, что Тигра - это пятая JDK.

Не знаю. smile
У меня установлен JDK 1.4.2.

ЗЫ: А почему Тигра? smile

Автор: batigoal 28.9.2005, 07:39
Цитата(korob2001 @ 28.9.2005, 00:45)
ЗЫ: А почему Тигра? smile

Вот такой вот code name. 6.0 будет Мустанг.

А в 1.4 нет ProcessBuilder'а.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)