繁体   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