我有一个运行 shell 命令的 Java 程序。一切正常,我可以查看命令是否有效或有错误...除了命令提示用户输入更多信息时。例如,当我运行命令ssh-keygen -t rsa -b 4096 -f my_key_name时,程序将永远旋转而不返回给用户,因为它正在等待我输入密码。现在我知道我可以-P ""跳过我添加密码,但我的问题是其他提示信息的命令。我只想知道如何将提示文本返回给用户(因为我并不真正需要用户输入他们对提示的响应的能力)。RunCommandDto runCommandDto = new RunCommandDto();Runtime rt = Runtime.getRuntime();Process proc = rt.exec('ssh-keygen -t rsa -b 4096 -f my_key_name');BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));String output = "";while ((String sInOut = stdInput.readLine()) != null) { output += sInOut + "\n";}while ((String sErr = stdError.readLine()) != null) { output += sErr + "\n";}
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
exec 进程的stdin可以通过proc.getOutputStream()
您通过此流发送的所有内容访问,将通过其stdin传递给 ssh-keygen 进程。
当然,如果您不发送它所期望的那种输入,该过程可能只是返回一些警告消息并继续等待。您需要发送的内容将在很大程度上取决于您将其发送到的过程。
另外:您正在通过读取 InputStream 和错误流来处理 ssh-keygen 的输出。但是,您可能希望在单独的线程中执行此操作 - 就像您现在拥有的那样,如果进程在写入 stdout 之前向 stderr 写入太多,它可能会因为缓冲区已满而挂起......
添加回答
举报
0/150
提交
取消