1

我正在编写代码以从 java 运行 perl 脚本。我提供给 java 程序的命令通过 shell 工作得很好。但是,当提供给运行时的 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 );
}
}
4

2 回答 2

0

您的文件在您的桌面上。您可能以某种方式运行 java 代码,使其以另一个用户身份运行,而没有您的桌面权限。

尝试将文件移动到公共位置或检查运行 java 进程的用户(您使用的是像 tomcat 这样的 Web 容器吗?只是通过控制台运行 JVM 实例?)

于 2012-10-08T20:44:06.577 回答
0

Perl 脚本不是可执行程序。它是一个脚本 - 只是一个文本文件。当您使用 shell 运行它时,就像 ./myscript.pl您正在利用以下特性一样sh- 解析脚本第一行的 linux shell,提取!#/bin/perl真正运行您的脚本,如下所示:

/bin/perl myscript.pl

当您从 java 运行 perl 脚本时,您必须执行类似的操作。使用perl命令运行脚本或(可能)使用/bin/sh myscript.pl. 我不确定最后一个版本是否有效,但请尝试一下。理论上应该。

于 2012-10-08T20:44:40.197 回答