1

Java プログラムから開始したい大きな perl スクリプトがあります。私はすべての可能性についてウェブ上で広範囲に検索しましたが、それ以上は役に立ちませんでした。

コマンドライン Perl スクリプトを開始するための次の Java スクリプトを作成しました。

try {
    String[] command = {"perl", "C:\\Users\\Rick\\Documents\\Perl\\InDelSub_finder_v0.2.0.pl"};//System.getProperty("user.dir")+"\\src\\InDelSub_finder_v0.2.0.pl", "-h"};
    String[] comm = {"-h"};
    System.out.println(Arrays.toString(command));
    System.out.println(Arrays.toString(comm));
    Process p = Runtime.getRuntime().exec(command, comm);
    p.waitFor();
    try{
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while ((line = in.readLine())!=null){
            System.out.println(line);
        }
    }catch(IOException e2){
        e2.printStackTrace();
    }
    System.out.println("exitValue = " + p.waitFor());
} catch (IOException e1) {
// TODO Auto-generated catch block
    e1.printStackTrace();
} catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

私は と を使ってString[]String与えようとしましたexec()が、結局どちらもうまくいきませんでしたexitValue() = 255。また、適切なファイルにアクセスするために複数の方法を試してみましたが (コメントのセクションでわかるように)、これは間違っているわけではありません。何らかの理由でプログラムを開くことができないことに関係していると思います。

誰でもこれで私を助けてもらえますか? 私はこれで本当に迷っており、仕事を続けるために必要です。

どうぞよろしくお願いいたします。

4

1 に答える 1

2

不適切な exec 署名 (環境変数を含む) を使用しています。配列に移動-hします。command

Perl スクリプトから返される値は、Java から呼び出す方法に依存しないと思います。

スクリプトが実行されることを確認するには、非常に単純なスクリプトを試してみてください。ディスクに何かを書き込んで、それが呼び出されたかどうかを確認し、出力を標準出力にキャプチャしてみてください。

p.waitFor()実行されたコマンドは、その出力を標準出力に受け取るのを待つことができ、waitFor はコマンドが終了するまで待機するため、デッドロックが発生する可能性があることに注意してください。

Perl スクリプトを分析して、コード 255 を返す場所を見つけます。

die関数を使用すると、Perl がコード 255 で終了するという情報が迅速に調査されました。これはヒントになる可能性があります。

于 2013-09-25T13:44:41.317 に答える