Как мне вызвать Perl Script в Java? - PullRequest
8 голосов
/ 02 марта 2009

Я прочитал Runtime.getRuntime().exec("perl script.pl") это вариант, но это лучший способ сделать это?

Мне понадобится ответ из этого сценария, поэтому в некоторых случаях мне придется читать ответ сценария, хотя в других случаях я мог бы прочитать его из текстового файла.

В любом случае, exec() - это хороший способ вызова Perl Script из Java? Должен заметить, я работаю над веб-приложением Java, поэтому проблема безопасности здесь.

Ответы [ 4 ]

10 голосов
/ 02 марта 2009

Вы можете использовать Runtime.getRuntime().exec() или использовать Process API . API-интерфейс процесса позволяет получить выходные данные сценария, поэтому вы можете общаться как с ними.

exitValue() и getInputStream(), кажется, то, что вам нужно.

4 голосов
/ 02 марта 2009

Здесь описывается, как сделать это довольно элегантно, хотя это может потребовать больше усилий, чем стоит: http://search.cpan.org/~nwclark/perl-5.8.9/jpl/docs/Tutorial.pod

Обзор:
Хорошо поддерживается JPL, но это сложный процесс:

Препроцессор JPL анализирует файл .jpl и генерирует оболочки кода C для методов Perl. Он также генерирует исходные файлы Java и Perl.

Компилятор C компилирует оболочку и связывает ее с разделяемой библиотекой libPerlInterpreter.so, создавая разделяемую библиотеку для оболочки.

Компилятор Java компилирует исходный файл Java, который использует встроенные методы для загрузки оболочки.

Оболочка соединяет код Java с кодом Perl в исходном файле Perl.

К счастью, универсальный Makefile.PL упрощает процесс. Это скрипт Perl, который генерирует Makefile для вас.

3 голосов
/ 02 марта 2009

exec (), вероятно, лучший вариант, и вы можете узнать его возвращаемое значение с помощью exitValue () . Вы также можете быть заинтересованы в Inline :: Java .

-John

1 голос
/ 10 февраля 2011

имейте в виду, что любой файл, создаваемый скриптом Perl, создается в рабочей папке Java. просто обратитесь к этому файлу как ./myPerlCreatedFile.ext'

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