我正在尝试使用Java与使用psexec在远程服务器上执行命令的大型批处理文件进行交互。
我可以使用流程构建器启动该文件,它适用于大多数命令,但似乎挂断了。
批处理文件中的一个特定命令如下:
ECHO .
Echo Which would you like to reboot?
Echo 1-10. For computers, enter computer number.
Echo E. Exit
set /p userinp=choose a number(0-22):
但是从Java我得到: 。 你要重启哪个? 1-10。对于计算机,请输入计算机编号 E.退出
然后它挂起
显然没有读取设定行,但更重要的是我还没有弄清楚如何将输入传递回子流程。
String[] command = {"cmd", "/c", "batchfile", "restart"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\"));
Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
任何意见都会受到赞赏。
答案 0 :(得分:0)
您的批处理作业要求您实际提供输入才能继续,这就是它似乎“挂起”的原因。您需要通过其输出流将此输入提供给流程。一个 高度 简化示例:
PrintWriter writer = new PrintWriter(process.getOutputStream());
writer.println("10");
writer.flush();
答案 1 :(得分:0)
您的进程不会挂起,只是等待命令行的某些输入,然后再继续。
当您通过Process.getInputStream()
阅读流程输出时,您可以使用Process.getOutputStream()
向其发送输入。
public abstract OutputStream getOutputStream()
获取子进程的输出流。对流的输出通过管道传输到此Process对象表示的流程的标准输入流中。 实现说明:输出流缓冲是个好主意。
返回: 输出流连接到子流程的正常输入。