Perl脚本未在Java中运行

时间:2012-10-08 20:39:12

标签: java perl

我正在编写代码来运行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 );
}
}

2 个答案:

答案 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运行脚本。我不确定最后一个版本是否可行但是尝试一下。从理论上说它应该。

相关问题