使用ProcessBuilder执行需要命令行输入的命令
问题描述:
我敲了一个应用程序试图帮助我的构建过程,并试图包含一个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
将提供输出预期。
答
只做git pull origin
没有默认配置的凭据,git
将在任何重要的操作等待他们。在你的代码中,你不会提供(既不看也没有)git
反馈,所以应用程序在这个阶段被卡住了。
配置git
默认凭据到您的.gitconfig
文件,任何git
命令将使用它们,控制台不会被卡住(既不是你的应用程序)。
+0
这是一种解决方法,而非解决方案。 'redirectXxx'调用应该将所有输入,输出和错误重定向到终端,并为不需要输入的进程正确工作。 –
如果你尝试任何其他的git命令作为'git status',你会得到任何输出。这是要知道git命令是否已正确添加到控制台。 –
@SergioLema是的,'git status'按预期返回输出。 –
所以,我认为问题仍然在证书。尝试配置git使用您的帐户(user.name和user.email到'.gitconfig') –