如何在ubuntu中从java执行perl脚本

如何在ubuntu中从java执行perl脚本,java,perl,ubuntu,Java,Perl,Ubuntu,我有一个需要运行两个参数的perl脚本。我目前正在使用Ubuntu,通过将目录更改为perl脚本所在的位置,并通过编写 perl tool.pl config=../mydefault.config file=../Test 但是,当我试图从java程序(我使用eclipse)运行perl脚本时,它总是给我消息命令失败。代码如下: Process process; try { process = Runtime.getRuntime().exec("perl /home/Leen/De

我有一个需要运行两个参数的perl脚本。我目前正在使用Ubuntu,通过将目录更改为perl脚本所在的位置,并通过编写

perl tool.pl config=../mydefault.config file=../Test
但是,当我试图从java程序(我使用eclipse)运行perl脚本时,它总是给我消息
命令失败
。代码如下:

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());
}
那么,请问我的代码中有什么错误?

您应该是,例如:

Runtime.getRuntime().exec(new String[] {"perl", "/home/Leen...", "config=...", "file=..."});
根据您当前拥有的功能,运行时将查找一个名为
perl/home/Leen/Desktop…
、空格和all的命令

当您从终端运行整个命令时,您的shell非常聪明,可以意识到一个空格从应该传递给它的参数(
/home/Leen/Desktop…
config=…
file=…
)中分隔了命令名(
perl
)。Runtime.exec()没有那么聪明。

你应该聪明,比如:

Runtime.getRuntime().exec(new String[] {"perl", "/home/Leen...", "config=...", "file=..."});
根据您当前拥有的功能,运行时将查找一个名为
perl/home/Leen/Desktop…
、空格和all的命令


当您从终端运行整个命令时,您的shell非常聪明,可以意识到一个空格从应该传递给它的参数(
/home/Leen/Desktop…
config=…
file=…
)中分隔了命令名(
perl
)。Runtime.exec()没有那么智能。

从终端运行命令时,是否检查了命令的存在状态<代码>$?。您确定是从Java代码中的正确目录运行它吗?exec中的路径。功能似乎是错误的。在运行脚本之前,打印出System.properties并检查运行时环境。或者尝试使用绝对路径:我的意思是/home/user/…从终端运行时,您是否检查了命令的存在状态<代码>$?。您确定是从Java代码中的正确目录运行它吗?exec中的路径。功能似乎是错误的。在运行脚本之前,打印出System.properties并检查运行时环境。或者尝试使用绝对路径:我的意思是/home/user/。。。。