java - 使用ProcessBuilder执行需要命令行输入的命令

标签 java

我正在开发一个应用程序来尝试帮助我的构建过程,并尝试包含 git pull origin命令。我尝试并测试了各种方法,但似乎无法获得任何输入或输出来使用该命令。

程序等待 Process.waitFor()没有输入或输出。

我假设git pull命令正在等待我输入用户名和密码,但到目前为止我还没有确定如何实现这一点。

关于 SO 的问题有很多,涵盖了这些类型的示例,但似乎没有一个答案适合我的用例。

我认为应该有效的最简单的代码是:

class CmdTest {
    public static void main(String[] args) throws Exception {
        ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "git pull origin");
        pb.redirectErrorStream(true);
        pb.redirectInput(ProcessBuilder.Redirect.INHERIT);
        pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);

        Process process = pb.start();
        process.waitFor();
    }
}

替换 git pull origindir将提供预期的输出。

最佳答案

仅执行 git pull origin 而无需默认配置的凭据,git 将在任何重要操作中等待它们。在您的代码中,您不提供(也不查看)git 反馈,因此应用程序会陷入此阶段。

git 的默认凭据配置到 .gitconfig 文件中,任何 git 命令都将使用它们,并且控制台不会卡住(您的应用程序也不会卡住)。

关于java - 使用ProcessBuilder执行需要命令行输入的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421932/

相关文章:

java - 保留 - Eclipse 和 Java

java - 从对话框中删除标签

java - 如何使用thymeleaf在页面源代码中打印mensagens?

Java 3D - 边界球体

java - 将 Jersey 与 RMI 集成

java - 将值从 javascript 传递到 Tapestry java

java - 如何使用字符串获取变量值

java - 为什么父类(super class)的实例可以放入子类的数组中?

java - 如何集中日志配置,只使用 log4j.properties?

Java网络: how to simulate two different computers?