gpt4 book ai didi

java - 启动进程时出现 IOException

转载 作者:行者123 更新时间:2023-11-30 08:21:37 24 4
gpt4 key购买 nike

我正在尝试从 Java 程序运行一些 Mercurial 命令。我使用 ProcessBuilder 构建我的 Process,如下所示:

final ProcessBuilder procBuilder = new ProcessBuilder("hg", "log");

procBuilder.directory(new File("/Users/feuerball/workspace/www"));

final Process proc = procBuilder.start();

文件夹 www 包含一个 Mercurial 存储库,hg 已安装并位于系统 PATH 中。但是当我启动该过程时,我的程序抛出异常。这是堆栈跟踪:

Exception in thread "main" java.io.IOException: Cannot run program "hg" (in directory "/Users/feuerball/workspace/www"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
at de.feuerball.tests.Test.main(Test.java:16)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:185)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
... 1 more

为什么会出现此错误?

更新

为了显示该目录确实存在,我稍微更改了代码:

final File repo = new File("/Users/feuerball/workspace/www");

System.out.println("Directory? " + repo.isDirectory());
System.out.println("Readable? " + repo.canRead());
System.out.println("Writable? " + repo.canWrite());

final ProcessBuilder procBuilder = new ProcessBuilder("hg", "log");
procBuilder.directory(repo);

final Process proc = procBuilder.start();

证明如下:

Directory? true
Readable? true
Writable? true
Exception in thread "main" java.io.IOException: Cannot run program "hg" (in directory "/Users/feuerball/workspace/www"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
at de.brushmate.tests.Test.main(Test.java:22)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:185)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
... 1 more

最佳答案

ProcessBuilder 不使用 env 变量 PATH,它找不到“hg”,您需要指定“hg”的绝对路径(如/usr/bin/hg,如果您'正在使用 Linux)

关于java - 启动进程时出现 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25080194/

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