2017-02-23 167 views
1

我敲了一个应用程序试图帮助我的构建过程,并试图包含一个git pull origin命令。我试过并测试过各种方法,但似乎无法获得任何输入或输出以使用该命令。使用ProcessBuilder执行需要命令行输入的命令

该程序等待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(); 
    } 
} 

dir更换git pull origin将提供输出预期。

+0

如果你尝试任何其他的git命令作为'git status',你会得到任何输出。这是要知道git命令是否已正确添加到控制台。 –

+0

@SergioLema是的,'git status'按预期返回输出。 –

+0

所以,我认为问题仍然在证书。尝试配置git使用您的帐户(user.name和user.email到'.gitconfig') –

回答

0

只做git pull origin没有默认配置的凭据,git将在任何重要的操作等待他们。在你的代码中,你不会提供(既不看也没有)git反馈,所以应用程序在这个阶段被卡住了。

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

+0

这是一种解决方法,而非解决方案。 'redirectXxx'调用应该将所有输入,输出和错误重定向到终端,并为不需要输入的进程正确工作。 –