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

时间:2017-02-23 17:01:15

标签: 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 origin替换dir将按预期提供输出。

1 个答案:

答案 0 :(得分:0)

在没有默认配置凭据的情况下执行git pull origingit将在任何重要操作时等待它们。在您的代码中,您没有提供(不看)git反馈,因此应用程序在此阶段陷入困境。

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