2009-03-02 15 views
8

Leo Runtime.getRuntime().exec("perl script.pl") es una opción, pero ¿es esta la mejor manera de hacerlo?¿Cómo debo llamar a Perl Script en Java?

Necesitaré una respuesta de esa secuencia de comandos, así que tendré que leer la declaración del script en algunos casos, aunque podría leerlo desde un archivo de texto en otros casos.

De todos modos, ¿es exec() una buena forma de llamar a Perl Script desde Java? Debo señalar que estoy trabajando en una aplicación web Java, por lo que la seguridad es un problema aquí.

+0

Pregunta similar: http://stackoverflow.com/questions/971215/include-perl-in-java –

Respuesta

9

Puede usar Runtime.getRuntime().exec() o usar Process API. Process API le permite obtener el resultado de la secuencia de comandos, por lo que puede hacer que ambos se comuniquen.

exitValue() y getInputStream() parece ser lo que necesita.

+0

Utilice el siguiente código para ejecutar código Java en una máquina con Windows: process = r.exec ("cmd/c perl D: \\ perlexamples \\ hello.pl"); –

3

exec() es probablemente la mejor opción y puede ver su valor de retorno con exitValue(). Usted también podría estar interesado en Inline::Java.

-John

+0

Hay un buen tutorial en Inline :: Java en http://perladvent.pm.org/2003/21st/ – daotoad

4

Esto describe cómo hacerlo bastante elegante, aunque puede ser más esfuerzo que vale la pena: http://search.cpan.org/~nwclark/perl-5.8.9/jpl/docs/Tutorial.pod

general:
bien apoyado por el JPL, pero es una complicada proceso:

El preprocesador JPL analiza el archivo .jpl y genera contenedores de código C para los métodos Perl. También genera archivos fuente Java y Perl.

El compilador de C compila el contenedor y lo vincula a la biblioteca compartida libPerlInterpreter.so, produciendo una biblioteca compartida para el contenedor.

El compilador de Java compila el archivo fuente de Java, que utiliza métodos nativos para cargar el contenedor.

El contenedor conecta el código de Java con el código de Perl en el archivo fuente de Perl.

Afortunadamente, un Makefile.PL genérico simplifica el proceso. Este es un script de Perl que genera un Makefile para usted.

+1

JPL se eliminó de Perl 5.10. No recomendaría adoptar una API muerta. Use Inline :: Java en su lugar. – daotoad

1

tenga en cuenta que, cualquiera que sea el archivo creado por el script Perl, se crea en la carpeta de trabajo de Java. simplemente consulte ese archivo como './myPerlCreatedFile.ext'

Cuestiones relacionadas