Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Runtime.getRuntime().exec()java 1.7中的一个perl脚本_Java_Perl_Runtime.exec - Fatal编程技术网

Runtime.getRuntime().exec()java 1.7中的一个perl脚本

Runtime.getRuntime().exec()java 1.7中的一个perl脚本,java,perl,runtime.exec,Java,Perl,Runtime.exec,我有一个很大的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"

我有一个很大的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
移动到
命令
数组

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

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

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

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


Fast research向我提供信息,当使用
die
函数时,Perl会以代码255退出-这可能是一个提示。

感谢您回答我的问题killer\u PL,我已经尝试将-h也移动到命令数组,但这不起作用。(我确实调用了一个只返回时间的小脚本,它确实起作用了。)但是我没有发现perl使用
die
函数返回此代码的任何地方。非常感谢你,我可以再做一点。我真的欠你一个人!你救了我。在我的perl脚本中有
die
函数返回了代码255。我不知道它来自perl而不是java。别忘了从运行的进程中不断获取内容——为此做一个研究。如果输出缓冲区被填满,waitFor可以挂起应用程序。我尝试了我的perl脚本的帮助功能(java中的
-h
),它完成了我想要它做的事情。我现在将把perl脚本更改为正确的格式(这需要一些时间)。如果出了什么问题,我会在这里放点东西。再次感谢你,我已经为此工作了至少两周了。就像我说的,我欠你一个人情。