调用外部脚本来执行

时间:2018-01-04 07:23:45

标签: java runtime.exec

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

  1. 由执行任务的java代码和
  2. 组成的类文件
  3. 一个perl脚本,需要在上面的(1.)类中调用。
  4. 我需要实现的主要操作是:我想调用同一项目中存在的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的正确格式吗?

1 个答案:

答案 0 :(得分:1)

你提到了“语法错误”,这可能是考虑到Windows Java应用程序中的"C:\\path\\file"路径的问题。

  

如果我想编写在java项目中导入的perl脚本的限定名称,如

,该怎么办?

Perl不会“导入”任何Java项目。只有Java类被“导入”。

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

话虽如此,Java没有“完全限定”文件名的概念。但它知道“绝对路径”,这就是我认为你的意思。但是,您应该更多地依赖Java应用程序的类路径,而不是特定计算机上的路径。

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

因此,如果你在类路径上有你的Perl文件,你需要获得它的绝对路径。有点像,

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