[英]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.