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