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=..."});

使用您当前拥有的内容,运行时会查找字面上名为 perl /home/Leen/Desktop...、空格和所有内容的命令。

当您从终端运行整个命令时,您的 shell 足够聪明,可以意识到空格将命令的名称 ( perl) 与应该传递给它的参数 ( /home/Leen/Desktop..., config=..., file=...) 分隔开。Runtime.exec() 并不那么聪明。

于 2012-09-14T15:34:49.417 回答