簡體   English   中英

Runtime.getRuntime()。exec()Java 1.7中的Perl腳本

[英]Runtime.getRuntime().exec() a perl script in java 1.7

我有一個很大的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 我還嘗試了(您可以在“注釋掉的部分”中看到)我嘗試了多種方法來訪問正確的文件,但這並不是問題所在。 我認為這與由於某種原因無法打開程序有關。

有人可以幫我嗎? 我真的迷失了這個,我需要它來繼續我的工作。

非常感謝您的寶貴時間。

您正在使用錯誤的exec簽名(帶有環境變量的簽名)。 -h移動到command數組。

我認為從Perl腳本返回的值不取決於您從Java調用它的方式。

為確保腳本已執行,只需嘗試一個非常簡單的腳本-您可以在磁盤上寫一些東西來檢查它是否被調用,然后可以嘗試將一些輸出捕獲到stdout。

請注意, p.waitFor()可能會導致死鎖,因為執行的命令可以等待您將其輸出接收到stdout,而waitFor將等待直到命令結束。

分析您的perl腳本,找出返回代碼255的位置。

快速的研究為我提供了信息,當使用die功能時,Perl以代碼255退出-這可能是一個提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM