gpt4 book ai didi

java - 为什么 Java Runtime.exec 命令可以工作,但 ProcessBuilder 无法执行 Perforce 客户端命令?

转载 作者:行者123 更新时间:2023-12-01 20:09:51 26 4
gpt4 key购买 nike

好的,要删除 Perfoce Label ,命令行命令是:p4 label -d mylabel123。现在我想使用Java 执行这个命令。我尝试了 Runtime.exec() ,它的效果非常好。但是,当我使用 ProcessBuilder 运行相同的命令时,它不起作用。任何帮助表示赞赏。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
exec1("p4 label -d mylabel123");
exec2("p4","label -d mylabel123");
}
public static void exec1(String cmd)
throws java.io.IOException, InterruptedException {
System.out.println("Executing Runtime.exec()");
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);

BufferedReader stdInput = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(
proc.getErrorStream()));

String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
proc.waitFor();
}
public static void exec2(String... cmd) throws IOException, InterruptedException{
System.out.println("\n\nExecuting ProcessBuilder.start()");
ProcessBuilder pb = new ProcessBuilder();
pb.inheritIO();
pb.command(cmd);
Process process = pb.start();
process.waitFor();
}
}

方法 exec1() 输出:标签 mylabel123 已删除。

方法 exec2() 输出:未知命令。尝试“p4 help”获取信息。

最佳答案

ProcessBuilder 希望您以单独的字符串形式提供命令名称和每个参数。当您(间接)执行时

pb.command("p4", "label -d mylabel123");

您正在构建一个使用单个参数 label -d mylabel123 运行命令 p4 的进程。您希望使用三个单独的参数来运行该命令:

pb.command("p4", "label", "-d", "mylabel123");

您的线索是第二种情况下的错误消息是由 p4 命令发出的(它显示“尝试'p4 help'获取信息”)。那么显然,问题出在论证上。不过,我承认,p4 确实通过将其参数之一称为“命令”而造成了一些困惑。

关于java - 为什么 Java Runtime.exec 命令可以工作,但 ProcessBuilder 无法执行 Perforce 客户端命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46816827/

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