问题遇到的现象和发生背景
想在前端通过websocket实现操作一个控制台程序,中间回涉及到输入用户名密码或者确认的操作。
后端使用ProcessBuilder执行了cmd /c命令,生成了Process。process的输出流可以向调用的程序写入指令,输入流可以获取控制台 输出的部分信息。
开发过程中获取process的输入流,用BufferReader.readLine()可以获取大部分程序返回的内容,但不能返回输入确认的信息, 通过输出流可以向程序写入指令,但在程序返回了输入确认信息时,再写入指令是没有反应的。
查了一下bat程序的写法,我猜是使用了 set /p指令,输入前有一个prompt内容,没法通过Process类的InputStream获取。
问题相关代码,请勿粘贴截图
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
while ((line = reader.readLine()) != null) {
//此处无法获取到prompt的内容
System.out.print(line);
}
运行结果及报错内容
通过cmd调用程序正常执行,会出现:
此时输入密码并回车即可继续执行。**#补充,密码为密文,输入时不可见**
但首先,process类没有获取到Password for default user:这行
其次,#通过process的OutputStream向程序写入密码,也不会有任何内容返回。
我想要达到的结果
怎样通过java实现调用cmd程序,并能在需要时进行输入?
既要读取到提示信息,又要能继续输入