2009-03-02 6 views
8

私はRuntime.getRuntime().exec("perl script.pl")を読んでいますが、これは最良の方法ですか?JavaでPerlスクリプトをどのように呼び出す必要がありますか?

私はそのスクリプトからの回答が必要なので、場合によってはスクリプトの返答を読む必要がありますが、他のケースではテキストファイルから読むことがあります。

とにかく、exec()はJavaからPerlスクリプトを呼び出すのに適していますか?私は注意すべきです、私はJava Webアプリケーションを扱っていますので、セキュリティはここで問題になります。

+0

類似の質問:http://stackoverflow.com/questions/971215/include-perl-in-java –

答えて

9

Runtime.getRuntime().exec()を使用するか、Process APIを使用します。 プロセスAPIを使用すると、スクリプトの出力を取得できるため、両方を通信できます。

exitValue()getInputStream()が必要なようです。

+0

WindowsマシンでJavaコードを実行する場合は、以下のコードを使用してください:process = r.exec( "cmd/c perl D:\\ perlexamples \\ hello.pl"); –

3

exec()はおそらく最良のオプションで、戻り値はexitValue()でキャッチできます。また、Inline::Javaに興味があります。

-Johnは

+0

Inline :: Javaに関する素晴らしいチュートリアルはhttp://perladvent.pm.org/2003/21st/ – daotoad

4

これは、それは価値があるよりも、より多くの努力かもしれないが、かなり優雅にそれを行う方法を概説します。 http://search.cpan.org/~nwclark/perl-5.8.9/jpl/docs/Tutorial.pod

概要:
JPLでよくサポートされていますが、それは複雑ですプロセス:

JPLプリプロセッサは、.jplファイルを解析し、Perlメソッド用のCコードラッパーを生成します。また、JavaおよびPerlソースファイルも生成します。

Cコンパイラはラッパーをコンパイルし、libPerlInterpreter.so共有ライブラリにリンクし、ラッパー用の共有ライブラリを生成します。

Javaコンパイラは、ネイティブメソッドを使用してラッパーをロードするJavaソースファイルをコンパイルします。

ラッパーは、JavaコードをPerlソースファイルのPerlコードに接続します。

幸いにも、一般的なMakefile.PLはプロセスを簡素化します。これはあなたのためのMakefileを生成するPerlスクリプトです。

+1

JPLはPerl 5.10から削除されました。私は死んだAPIを採用することをお勧めしません。代わりにInline :: Javaを使用してください。 – daotoad

1

Perlスクリプトが作成するファイルは、Javaの作業フォルダに作成されます。そのファイルを './myPerlCreatedFile.ext'として参照してください。

関連する問題