调用外部脚本执行

Call external script to execute

在我的项目中,我导入了 perl 脚本。所以我的项目现在包含:

  1. 一个 class 文件,包含 java 执行任务的代码和
  2. 一个perl脚本,上面(1.)中需要调用class。

我需要实现的主要操作是:我想调用同一项目中存在的 perl 脚本在 java 代码中间执行。

像这样:

public class Demo_Java{

// ... 
    System.out.println("entered 1st###############");
    Process p = Runtime.getRuntime().exec("perl /javaProject/perlScript.pl");
    p.waitFor();
}

但这行不通,我只是为了说明要求而提到它..
有什么办法可以将 perl 脚本调用到 java 文件中吗?

编辑:我尝试了 运行 以下代码:

    process = Runtime.getRuntime().exec("perl C:/javaProject/perlScript.pl ");
    process.waitFor();
    if(process.exitValue() == 0)
    {
        System.out.println("Command execution passed");
    }
    else
    {
        System.out.println("Command execution Failed");
    }

并且出现错误 -> command execution failed ..这可能是由于 Runtime.getRuntime().exec("perl C:/javaProject/perlScript.pl "); 上的语法错误,这是编写 exec 的正确格式吗?

您提到 "syntax error",这可能是考虑到 Windows Java 应用程序中的路径看起来像 "C:\path\file" 的问题。

what if i want to write qualified name of perl script imported in the java project like

Perl 不是 "imported into" 任何 Java 项目。只有 Java 类 是 "imported"。

就Java而言,您的脚本只是磁盘上的纯文本文件。事实上,你执行一个 OS 命令,它甚至知道它是一个脚本,这依赖于安装的 Perl 和你的 PATH 上的 perl 二进制文件,所以它真的不可移植。 ..

也就是说,Java 没有 "fully-qualified" 文件名的概念。不过,它知道 "absolute paths",这就是我认为你的意思。但是,您应该更多地依赖 Java 应用程序的类路径,而不是特定计算机上的路径。

例如,Difference between getClass().getClassLoader().getResource() and getClass.getResource()?

因此,如果您的 Perl 文件位于类路径中,则需要获取它的绝对路径。类似于

String path = getClass().getResource("/script.pl").toString();
Runtime.getRuntime().exec("perl " + path);