如何解决在 Java 中运行一个 cmd 命令来要求另一个输入
我应该使用 Java 运行一个命令。
命令是:
mosquitto_ctrl -u admin -P admin dynsec createClient User
运行命令后,它要求我输入两次,如下所示:
为用户输入新密码。没有密码按回车(用户将无法登录)。
用户的新密码:
然后:
重新输入用户密码:
程序自动给cmd输入怎么办?
我尝试编写此函数,但不起作用:
public static void createMosquittoUser(String username,String password) throws IOException {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe","/c","cd \"C:\\mosquitto\" && mosquitto_ctrl -u admin -P admin dynsec createClient " + username);
builder.redirectErrorStream(true);
Process p = builder.start();
OutputStream os = p.getOutputStream();
os.write(password.getBytes());
os.write(password.getBytes());
os.close();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
我该如何修复它才能自动执行所有命令?
解决方法
要为流程提供行尾,您需要将 System.lineSeparator()
发送到流。这应该提供密码作为一行完整的输入:
os.write(password.getBytes());
os.write(System.lineSeparator().getBytes());
您正在发送 password
两次(或者您应该先发送用户名然后是密码?)如果您通过重复上述语句发送两行输入,这可能会起作用,但这可能无法按预期工作由于输入在过程中的缓冲方式,因此您可能需要从每个 p.getInputStream()
之间的 os.write
中读取一行(如@Michael 所建议的那样)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。