2012-10-08 169 views
1

我在編寫代碼以從java運行perl腳本。我提供給java程序的命令通過shell可以很好地工作。但是,當提供給Runtime的exec()方法時,相同的命令返回退出代碼2。爲什麼發生這種情況?未在Java中運行的Perl腳本

我的代碼是:

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

你的文件在您的桌面。您可能以某種方式運行java代碼,使其作爲另一個用戶而無需桌面權限。

嘗試或者將文件移動到一個公共的位置或檢查運行Java程序的用戶(您使用的Web容器,如Tomcat?只是運行在JVM實例直通控制檯?)

0

Perl腳本不是可執行程序。它是一個腳本 - 只是一個文本文件。當您使用的shell,比如./myscript.pl你正在使用的sh功能運行它 - 它分析你的腳本的第一行Linux shell中,提取!#/bin/perl真的運行腳本如下:

/bin/perl myscript.pl

當你從java運行Perl腳本時,你必須做類似的事情。使用perl命令或(可能)使用/bin/sh myscript.pl運行腳本。我不確定最後的版本會起作用,但可以試試。理論上它應該。

+0

我認爲 - 只要Perl腳本是正確的chmod,並且有一個shebang行 - 這應該不是問題。 –