0

我正在尝试从 java 程序中执行一个可执行文件和一个 perl 脚本。我发现了许多与此类似的主题,但其中大多数是指 Windows。我知道 java 是独立于平台的,无论如何它都应该可以工作,但事实并非如此。我已经尝试过的解决方案是基于 java Runtime 的解决方案,它是 exec 方法。它在 Windows 上运行良好,但由于我在 linux 上移植我的程序,我需要对其进行调整。正如我所说,我需要执行一个我已经编译并用 C++ 编写的可执行文件,它看起来正在工作,但它以退出值 1 完成执行。我不知道它是什么意思,但在 Windows 上它以 0 退出这就是它应该在 linux 上的样子(?!?!)。另一方面,珍珠脚本根本没有启动。我使用命令“perl script.pl”

有人知道执行这些文件的另一种方法吗?或者也许我的实施有问题?

如果您想看一下,这是代码:这是 perl 脚本的代码

public static void main(String[] args){
    System.out.println("Starting");
    try{
        String[] cmd = {"perl", "cloc-1.53.pl"};
        Process pr = Runtime.getRuntime().exec(cmd);
        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line=null;

        while((line=input.readLine()) != null) {
            System.out.println(line);
        }

        int exitVal = pr.waitFor();
        System.out.println("Exit code: " + exitVal);
    } catch (Throwable t){
        t.printStackTrace();
    }
}

对于编译的文件,我改变了这个:

String[] cmd = {"perl", "cloc-1.53.pl"};

和:

String cmd = "./UCC";
4

1 回答 1

1

在 windows 和 linux 上启动进程应该没有区别。

好文章http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html 它是旧方法,但提供了很好的洞察力。

文章转换为新方式:

从 Runtime.exec() 到 ProcessBuilder

于 2011-08-31T16:55:32.060 回答