不能用的ProcessBuilder运行程序,运行命令行
问题描述:
在Linux(Debian的)很好,我可以运行此命令:不能用的ProcessBuilder运行程序,运行命令行
/usr/lib/jvm/jdk1.7.0_21/bin/java -jar ~/myjar.jar ".*"
我试图用,而不是从一个Java程序运行:
ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", "\".*\"");
System.out.println(pb.command());
打印以下,符合市场预期:
[/usr/lib/jvm/jdk1.7.0_21/bin/java, -jar, ~/myjar.jar, ".*"]
不过,我不会从日得到的结果相同e程序(它运行但输出看起来好像没有适当考虑".*"
参数)。
任何想法,为什么它不工作?
注意:相同的代码在Windows上正常工作。
答
看起来通配符不是使用glob展开的。您可以使用,而不是一个shell:
ProcessBuilder pb =
new ProcessBuilder("bash", "-c", "java -jar ~/myjar.jar \".*\"");
,也可以删除周围的通配符双引号:
ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", ".*");
不要使用的ProcessBuilder严重,因为它不是稳定的,很容易失败的命令复杂的输出如'mvn build'。在可能的情况下使用shell脚本 – Amos 2017-11-12 09:15:50
@Amos只要流程流消耗 - 我不知道你指的是什么稳定性问题,我会定期使用ProcessBuilder处理大输出的命令,不会有任何问题。 – assylias 2017-11-12 09:22:37
Hello assylias,早先我们使用ProcessBuilder运行mvn(maven)命令,它通常会卡住,ProcessBuilder永远停在那里 – Amos 2017-11-12 09:26:03