【发布时间】:2021-06-11 11:35:30
【问题描述】:
我目前正在尝试用 java 编写一个小程序,它应该接管我一直在使用的旧批处理脚本的工作。
此批处理脚本执行一个名为 sum.exe(Supermicro 更新管理器)的程序。
但是,无论我尝试哪种方式,程序要么没有响应,要么直接告诉我在文件所在的目录中找不到文件。
boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
ProcessBuilder builder = new ProcessBuilder("C:\\Users\\[Username]\\SUM\\sum.exe");
if (isWindows) {
builder.command("sum.exe", "-i 192.168.4.10 -u ADMIN -p ADMIN -c CheckOOBSupport");
} else {
builder.command("sh", "-c", "ls");
}
builder.redirectErrorStream(true);
Process process = builder.start();
StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), System.out::println);
StreamGobbler streamGobblerErrors = new StreamGobbler(process.getErrorStream(), System.out::println);
Executors.newSingleThreadExecutor().submit(streamGobbler);
Executors.newSingleThreadExecutor().submit(streamGobblerErrors);
int exitCode = process.waitFor();
assert exitCode == 0;
这是我目前拥有的代码。我在此处尝试调用的命令将 100% 出错,因此我确保也将它们重定向。
据我了解,有 3 种不同的方法可以为 Processbuilder 设置文件路径。 无论是你:
- 在构造函数中设置路径
- 在 .command() 方法中设置可执行文件和参数之间的路径
- 或者您通过创建一个新文件(并使用 System.Property)来设置构建器的目录
我在C:\Users\[Username]\SUM 下有一个 SUM 文件夹的完整副本,我已经尝试了上面列出的所有 3 个选项,但总是收到系统找不到指定文件的错误消息
此外,我仍然不确定该命令是否会以这种方式工作。我只通过批处理脚本或 cmd.exe 本身使用过 sum.exe,所以不需要该命令
builder.command("cmd.exe", "sum.exe -i 192.168.4.10 -u ADMIN -p ADMIN -c CheckOOBSupport)
改为?
谁能告诉我我做错了什么? 谢谢!
【问题讨论】:
标签: java processbuilder