我正在编写代码来运行java中的perl脚本。我提供给java程序的命令通过shell完美地运行。但是,相同的命令在提供给Runtime的exec()方法时返回退出代码2。为什么会这样?
我的代码是:
package org.nlp.rishabh;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ReferenceExtractor {
public static void main( String[] args ) throws Exception {
String parscitCommand = "/home/rishabh/Desktop/parscit/bin/citeExtract.pl ";
String parscitOptions = "-m ";
String parscitAction = "extract_all ";
String paperPath = "/home/rishabh/Desktop/aas.txt";
String xml = null;
String command = parscitCommand + parscitOptions + parscitAction + paperPath;
System.out.println( command );
try {
Runtime runtime = Runtime.getRuntime();
Process pr = runtime.exec( command );
// Process pr = runtime.exec( new String[] { "perl", parscitCommand, parscitOptions, parscitAction, paperPath } );
BufferedReader reader = new BufferedReader( new InputStreamReader( pr.getInputStream() ) );
String temp;
StringBuilder sb = new StringBuilder();
while ( ( temp = reader.readLine() ) != null ) {
sb.append( temp );
}
xml = sb.toString();
int returnVal = pr.waitFor();
System.out.println( returnVal );
} catch ( Exception e ) {
e.printStackTrace();
}
System.out.println( xml );
}
}
答案 0 :(得分:0)
您的文件位于桌面上。您可能正在运行Java代码,使其作为另一个没有桌面权限的用户运行。
尝试将文件移动到公共位置或检查运行java进程的用户(您使用的是像tomcat这样的Web容器吗?只是通过控制台运行JVM实例?)
答案 1 :(得分:0)
Perl脚本不是可执行程序。它是一个脚本 - 只是一个文本文件。当您使用./myscript.pl
之类的shell运行它时,您正在利用sh
的功能 - 解析脚本第一行的linux shell,真正提取!#/bin/perl
和 运行您的脚本如下:
/bin/perl myscript.pl
当你从java运行perl脚本时,你必须做类似的事情。使用perl
命令或(可能)使用/bin/sh myscript.pl
运行脚本。我不确定最后一个版本是否可行但是尝试一下。从理论上说它应该。