我有一个很棒的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
。我也试过(你可以在评论的部分看到)我尝试了多种方法来访问正确的文件,但这不是什么问题。我认为它与某些原因无法打开程序有关。
有人可以帮我这个吗?我真的迷失了这个,我需要它继续我的工作。
非常感谢你的时间。
答案 0 :(得分:2)
您正在使用不良的exec签名(与环境变量一起使用)。将您的-h
移至command
阵列。
我认为从Perl脚本返回的值不取决于您从Java调用它的方式。
为了确保你的脚本被执行,只需尝试一个非常简单的脚本 - 你可以在磁盘上写一些东西来检查它是否被调用,然后你可以尝试将一些输出捕获到stdout。
请注意p.waitFor()
会导致死锁,因为执行的命令可以等待您接收到stdout的输出,waitFor将等到命令结束。
分析你的perl脚本,找出返回代码255的位置。
快速研究为我提供了信息,当使用die
函数时,Perl会使用代码255退出 - 这可能是一个提示。