繁体   English   中英

Runtime.getRuntime()。exec()Java 1.7中的Perl脚本

[英]Runtime.getRuntime().exec() a perl script in java 1.7

我有一个很大的Perl脚本,我想通过我的Java程序开始。 我已经在网上广泛搜索了所有可能性,但它们并没有进一步帮助我。

我制作了以下Java脚本来启动命令行Perl脚本。

try {
    String[] command = {"perl", "C:\\Users\\Rick\\Documents\\Perl\\InDelSub_finder_v0.2.0.pl"};//System.getProperty("user.dir")+"\\src\\InDelSub_finder_v0.2.0.pl", "-h"};
    String[] comm = {"-h"};
    System.out.println(Arrays.toString(command));
    System.out.println(Arrays.toString(comm));
    Process p = Runtime.getRuntime().exec(command, comm);
    p.waitFor();
    try{
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while ((line = in.readLine())!=null){
            System.out.println(line);
        }
    }catch(IOException e2){
        e2.printStackTrace();
    }
    System.out.println("exitValue = " + p.waitFor());
} catch (IOException e1) {
// TODO Auto-generated catch block
    e1.printStackTrace();
} catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

我尝试使用String[]String赋予exec() ,但是最后两者都没有用,它一直给我一个exitValue() = 255 我还尝试了(您可以在“注释掉的部分”中看到)我尝试了多种方法来访问正确的文件,但这并不是问题所在。 我认为这与由于某种原因无法打开程序有关。

有人可以帮我吗? 我真的迷失了这个,我需要它来继续我的工作。

非常感谢您的宝贵时间。

您正在使用错误的exec签名(带有环境变量的签名)。 -h移动到command数组。

我认为从Perl脚本返回的值不取决于您从Java调用它的方式。

为确保脚本已执行,只需尝试一个非常简单的脚本-您可以在磁盘上写一些东西来检查它是否被调用,然后可以尝试将一些输出捕获到stdout。

请注意, p.waitFor()可能会导致死锁,因为执行的命令可以等待您将其输出接收到stdout,而waitFor将等待直到命令结束。

分析您的perl脚本,找出返回代码255的位置。

快速的研究为我提供了信息,当使用die功能时,Perl以代码255退出-这可能是一个提示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM