我在构建过程中有一个ant命令,当我从执行命令提示符执行该命令时,它会提示我输入密码,当我输入密码并按回车键时,它会继续执行并让我成功消息。
现在我想用编程方式使用Runtime.execute(...)在java中做同样的事情;并且它在提示密码之前工作正常(我正在读取命令提示符的输出)但我不知道如何在cmd输出提示输入密码时显示一个对话框,我可以输入密码密码我的程序继续执行并成功完成。我想从命令提示符手动执行相同的操作。
所以问题是,是否可以在Runtime.execute执行命令之间输入参数,如果是的话,如何恢复命令执行传递参数?
执行命令的swing应用程序很简单,我想使用Swing Ui对话框来获取密码。
根据Andy Thomas的建议更新了我的代码:
Process p1 =Runtime.getRuntime().exec("cmd /C my command", null, myProject);
BufferedReader in = new BufferedReader(
new InputStreamReader(p1.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
if(line.contains("Please enter password")){
System.out.println("Prompting for password ");
OutputStream child_stdin = p1.getOutputStream();
BufferedWriter child_writer = new BufferedWriter(new OutputStreamWriter( child_stdin ));
child_writer.write( "password123" );
child_writer.flush();
}
}
}
但没效果。
答案 0 :(得分:1)
当你调用Runtime.exec()
时,你会得到一个代表子进程的Process对象。
编辑:这是一个草图(未经过测试),您将如何根据以下评论的要求为子进程编写String userPassword
。 ......忽略了从子进程的输出流中读取的部分,没有这部分,子进程可能会阻塞。
Process process = Runtime.getRuntime().exec("...");
...
OutputStream child_stdin = process.getOutputStream();
BufferedWriter child_writer = new BufferedWriter(new OutputStreamWriter( child_stdin ));
child_writer.write( userPassword );
child_writer.newLine(); // suggested by OP
child_writer.flush();
答案 1 :(得分:1)