1

実行するために2つの引数を必要とするperlスクリプトがあります。私は現在Ubuntuを使用しており、ディレクトリをperlスクリプトが存在する場所に変更し、次のように記述して、ターミナルからperlスクリプトを実行することができました。

perl tool.pl config=../mydefault.config file=../Test

ただし、Javaプログラムからperlスクリプトを実行しようとすると(Eclipseを使用しています)、常にメッセージが表示されますCommand Failure。これはコードです:

Process process;
try {
    process = Runtime.getRuntime().exec("perl /home/Leen/Desktop/Tools/bin/tool.pl config=../mydefault.config file=../Test");
    process.waitFor();
    if(process.exitValue() == 0) {
        System.out.println("Command Successful");
    } else {
        System.out.println("Command Failure");
    }
} catch(Exception e) {
    System.out.println("Exception: "+ e.toString());
}

では、私のコードの何が問題になっていますか?

4

1 に答える 1

6

次のように、への呼び出しでコマンドを引数から分離exec()する必要があります。

Runtime.getRuntime().exec(new String[] {"perl", "/home/Leen...", "config=...", "file=..."});

あなたが現在持っているもので、Runtimeは文字通り perl /home/Leen/Desktop...、spacesとallという名前のコマンドを探します。

ターミナルからコマンド全体を実行すると、シェルは十分に賢く、スペースがコマンドの名前()を、コマンドに渡される引数(、、)から区切ることを認識perl/home/Leen/Desktop...ます。Runtime.exec()はそれほど賢くはありません。config=...file=...

于 2012-09-14T15:34:49.417 に答える