【问题标题】:Java intercept command prompt replyJava拦截命令提示符回复
【发布时间】:2012-10-09 16:39:45
【问题描述】:

我正在通过 java 执行一些仅在命令提示符中输入的 cmd 命令。 我想知道是否有办法通过 Java 以编程方式获取和回复命令提示符问题?

例如:我在本地将一个远程 GIT 存储库添加到我的 GIT 结构中,所以当我执行时:

$ git remote add [url],

系统提示我输入密码。我可以捕获此消息(例如将消息传递给用户)并在同一命令提示符编程对象/cmd 窗口中回复。

(AND 明确在其中,因为执行上述命令、阅读提示回复、关闭命令提示、在新的且因此不相关的新提示窗口中通过新的 cmd 命令发送密码是无用的)。

【问题讨论】:

    标签: java command cmd prompt reply


    【解决方案1】:

    如果您使用 Runtime.getRuntime().exec 执行命令,则捕获/监视子进程的输入流并写入输出流以向其发送消息。

    例如

        Process process = Runtime.getRuntime().exec("Command ");        
        OutputStream pout = process.getOutputStream();
        PrintWriter pw = new PrintWriter(pout);
        pw.println("Command response here");
    

    【讨论】:

    • 所以我得到的响应确实是“密码:”,我怎样才能再次将我的密码回复到 cmd 提示符以便完成身份验证?感谢您提前回答!
    • 您可能会从输出流 (pout) 中获取“密码:”,对吗?然后发送密码,尝试 "pw.println("mypassword");"
    【解决方案2】:

    您可以通过使用ProcessBuilderProcess 启动该命令,与另一个命令的标准输入/输出/错误流交互。在这种情况下,该进程通常不会直接与命令窗口对话,因此如果需要,您必须将其输出打印给用户。

    请注意,某些进程会特别注意从标准输入读取密码,而是从控制台窗口读取密码。在这种情况下,上述方法可能不起作用。通常命令确实提供了一些方法来指定密码的不同来源。对于git,请搜索GIT_ASKPASS环境变量以及core.askpass配置设置。

    【讨论】: