当前位置: 首页 > 面试题库 >

Java:从Java运行批处理脚本时检测用户提示

经嘉
2023-03-14
问题内容

我需要从Java执行批处理脚本,该脚本执行以下操作

1)一旦启动,它将执行一个冗长的任务(最多几秒钟)。

2)此后,它显示提示“密码:”。

3)然后,用户输入密码并按Enter键。

4)然后,脚本完成其工作。

我知道如何从Java启动脚本,知道如何在Java中读取批处理脚本的输出,但是我不知道如何等待密码提示出现(如何知道批处理脚本正在等待密码条目)。

因此,我的问题是:如何知道批处理脚本何时打印提示?

目前,我有以下代码:

final Runtime runtime = Runtime.getRuntime();
final String command = ... ;

final Process proc = runtime.exec(command, null, this.parentDirectory);

final BufferedReader input = new BufferedReader(new InputStreamReader(
  proc.getInputStream()));

String line = null;

while ((line = input.readLine()) != null) {
 LOGGER.debug("proc: " + line);
}

问题答案:

那应该做的工作:

  public static void main(final String... args) throws IOException, InterruptedException {
    final Runtime runtime = Runtime.getRuntime();
    final String command = "..."; // cmd.exe

    final Process proc = runtime.exec(command, null, new File("."));

    final BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));

    StringBuilder sb = new StringBuilder();
    char[] cbuf = new char[100];
    while (input.read(cbuf) != -1) {
        sb.append(cbuf);
        if (sb.toString().contains("Password:")) {
            break;
        }
        Thread.sleep(1000);
    }
    System.out.println(sb);
}


 类似资料:
  • 问题内容: 我正在尝试从下面给出的Java版本输出中获取‘6’ 同样,我写了这个批处理脚本 显示“ 1.6.0_21” 有人可以指导我正确的方向吗?我不太熟悉。 问题答案: 在第一个循环中,说我们将仅使用命令输出中的第三个标记。无需将命令的输出重定向到文件,我们可以在循环本身中运行此命令。插入记号()是转义字符,并且需要,所以我们可以嵌入,并在命令字符串符号。 在循环体内,我们设置了一个新的var

  • 问题内容: 我正在尝试从Java可执行文件运行另一个目录中的批处理文件。我有以下代码: 结果是程序在运行该程序的根目录中打开一个cmd窗口,并且无法访问我提供的文件路径。 问题答案: 而不是,您需要使用方法签名: 但就我个人而言,我会改用,它稍微冗长一些,但比容易使用和调试。

  • 我试图从我的Java可执行文件运行另一个目录中的批处理文件。我有以下代码: 结果是,程序在运行程序的根目录中打开了一个cmd窗口,无法访问我提供的文件路径。

  • 我在尝试从Java运行R脚本时遇到了一个问题。我真的在互联网上寻找这个问题的答案,但什么都不管用。 求你帮帮我 这是java代码 以下是当我添加Runtime.getRuntime(). exec("Rcript"rScriptFileName)时抛出的错误消息:

  • 我正在运行多个批处理脚本,提示用户输入2个输入(每个脚本输入相同的2个)。提示似乎最终来自连接到激活服务器的Java文件,但输入是在cmd窗口而不是Java窗口中输入的。 使用