簡體   English   中英

在Java中的Linux上的文件夾內運行進程

[英]Running a process inside a folder on Linux in Java

因此,我有一個運行並讀取命令行Linux應用程序輸出的JAR程序。 這個應用程序位於一個臨時文件夾中,這是我的JAR文件所在的位置。

這是讀取輸出的Java代碼:

Process proc;
ProcessBuilder pb = new ProcessBuilder();
pb.command("temp/myapp", "arg1");
pb.redirectErrorStream(true);
try {
     proc = pb.start();
} catch (IOException ex) {
    System.out.println("ERROR: Couldn't start process");
}
scan = new Scanner(proc.getInputStream());
String line = "";
while (scan.hasNext())
      line += scan.nextLine() + System.lineSeparator();
scan.close();

稍后,我當然會返回該字符串。

現在,問題在於Scanner拋出NullPointerException,這意味着找不到或無法運行該進程。 我暫時退出可執行文件並使用它的那一刻

pb.command("./myapp", "arg1");

我的程序運行正常。

如果我在JAR所在的位置打開終端,則temp/myapp arg1將完全返回其應有的狀態。 只是Java代碼似乎無法在temp中運行此代碼。

問題是,如果不是我上面描述的方式,我如何指向temp內部的CLI應用程序?

PS:Java應用程序可以在Windows上使用pb.command(“ temp / myapp”,“ arg1”)和Winapp版本的myapp在相同的設置下運行,因此這是特定於Linux的問題。

我認為這並沒有按照各自的路徑進行。 嘗試給出過程的絕對路徑,然后執行。 希望它能工作。

我找到了解決方案。

我至少在Linux上也使用ProcessBuilder的directory()方法,它不僅設置了Process的工作目錄,還設置了要從中啟動Process的目錄,所以我在Linux上實際解析代碼的方式是temp/temp/myapp 當我將temp設置為工作目錄時,只需使用./myapp從temp啟動它。 在Windows(我的主要平台)上,不是這種情況,我仍然必須使用pass temp/myapp作為command()中的參數。

暫無
暫無

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

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