1

Java から perl スクリプトを実行するコードを書いています。私がJavaプログラムに提供しているコマンドは、シェルを介して完全に機能しています。ただし、同じコマンドがランタイムの exec() メソッドに渡されると、終了コード 2 が返されます。なぜこれが起こっているのですか?

私のコードは次のとおりです。

package org.nlp.rishabh;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ReferenceExtractor {
public static void main( String[] args ) throws Exception {

    String parscitCommand = "/home/rishabh/Desktop/parscit/bin/citeExtract.pl ";
    String parscitOptions = "-m ";
    String parscitAction = "extract_all ";
    String paperPath = "/home/rishabh/Desktop/aas.txt";
    String xml = null;

    String command = parscitCommand + parscitOptions + parscitAction + paperPath;
    System.out.println( command );

    try {
        Runtime runtime = Runtime.getRuntime();
        Process pr = runtime.exec( command );
//      Process pr = runtime.exec( new String[] { "perl", parscitCommand, parscitOptions, parscitAction, paperPath } );

        BufferedReader reader = new BufferedReader( new InputStreamReader( pr.getInputStream() ) );
        String temp;
        StringBuilder sb = new StringBuilder();

        while ( ( temp = reader.readLine() ) != null ) {
            sb.append( temp );
        }

        xml = sb.toString();

        int returnVal = pr.waitFor();
        System.out.println( returnVal );
    } catch ( Exception e ) {
        e.printStackTrace();
    }

    System.out.println( xml );
}
}
4

2 に答える 2

0

Perl スクリプトは実行可能プログラムではありません。これはスクリプトであり、単なるテキスト ファイルです。スクリプトの最初の行を解析し、次のようにスクリプトを抽出して実際に./myscript.pl実行するLinuxシェルの機能を利用しているように、シェルを使用して実行している場合 :sh!#/bin/perl

/bin/perl myscript.pl

Java から perl スクリプトを実行している場合は、同様のことを行う必要があります。コマンドを使用してスクリプトを実行するperlか、(おそらく) を使用してスクリプトを実行します/bin/sh myscript.pl。最後のバージョンが機能するかどうかはわかりませんが、試してみてください。理論的にはそうすべきです。

于 2012-10-08T20:44:40.197 に答える
0

ファイルはデスクトップにあります。デスクトップへのアクセス許可を持たない別のユーザーとして Java コードを実行している可能性があります。

ファイルを共通の場所に移動するか、Java プロセスを実行しているユーザーを確認してください (Tomcat のような Web コンテナーを使用していますか? コンソールを介して JVM インスタンスを実行しているだけですか?)

于 2012-10-08T20:44:06.577 に答える