gpt4 book ai didi

java - 如何在 java 中运行已安装的终端命令?

转载 作者:行者123 更新时间:2023-12-02 00:57:19 25 4
gpt4 key购买 nike

我最近正在编写一个使用 ProcessBuilder 运行终端命令的程序,但每当我运行该程序时,我都会收到此错误:

java.io.IOException: Cannot run program "convert": error=2, No such file or directory
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at Downloader.uncompressImage(Downloader.java:37)
at Main.main(Main.java:51)
Caused by: java.io.IOException: error=2, No such file or directory
at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:319)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:250)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
... 3 more

我很确定这个错误是因为它找不到“convert”命令所在的位置,因为这是我安装在计算机上的 ImageMagick 使用的命令。我知道该命令有效,因为如果我在常规终端窗口中输入该命令,它就会有效。

如果需要指定“转换”命令的位置,我仍然不知道它在哪里,所以如果回答这个问题的人也可以告诉我如何找到它,那就太棒了。

总而言之,我非常确定转换命令是导致错误的原因,因为它是第三方命令,所以我的问题是,如何使用转换命令而不收到错误消息,以及解决方案要求我找到转换命令的目录我该怎么做?

如果有人想查看导致错误的代码,那就是:

public void uncompressImage (String name, boolean back, String path) {

String b = "";

name = name.toLowerCase().replace("-", "").replace(" ", "").replace(".", "");

if (back) {

b = "-back";

}

ProcessBuilder pb = new ProcessBuilder();

String[] args = new String[] {"convert" , name + b + ".gif", "-coalesce", name + b + ".gif"};

try {
pb.command("cd " + path);
pb.command(args);
Process process = pb.start();
} catch (IOException e) {
e.printStackTrace();
}

}

(此代码在 MacOS 上运行)

编辑:我已经尝试检查pathname,两者都是正确的。

最佳答案

使用ProcessBuilder.directory(File)而不是cd。添加inheritIO()看看发生了什么。并记住waitFor()您要完成的流程。就像,

try {
pb.inheritIO();
pb.directory(new File(path));
pb.command(args);
Process process = pb.start();
process.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

您可能还需要将“convert”更改为“/usr/local/bin/convert”(取决于您的安装方式和位置)。

关于java - 如何在 java 中运行已安装的终端命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61181274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com