想在前端通过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调用程序正常执行,会出现:
怎样通过java实现调用cmd程序,并能在需要时进行输入?
既要读取到提示信息,又要能继续输入
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "GBK"));
解决方式:不要使用按行读取 使用类似如下代码 可以达到你想要的结果
while (true) {
byte[] buffer = new byte[ins.available()];
if ((length = ins.read(buffer)) != -1) {
// code
}
}