如何向java进程传递多个密码
我使用运行时执行一个命令,该命令接受密码两次(如:输入密码、验证密码)。我正在使用以下代码。我面临的问题是程序挂起,因为它正在等待验证密码。第一个密码被正确传递(我通过从我的命令和java代码中删除verify password来验证它是否有效),verify password没有被传递到命令,并且命令不确定地等待verify password。如果有人有任何建议,请告诉我
try
{
runtime = Runtime.getRuntime();
process = runtime.exec("<<my command>>"");
String inLine = "";
String errLine = "";
StringBuffer inBuffer = new StringBuffer();
StringBuffer errBuffer = new StringBuffer();
PrintWriter pw = new PrintWriter(process.getOutputStream());
pw.print("<<password>>"+"\n");
pw.print("<<verify password>>"+"\n");
pw.flush();
BufferedReader stdin = new BufferedReader(new InputStreamReader(
process.getInputStream()));
BufferedReader stderr = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
while ((inLine = stdin.readLine()) != null) {
inBuffer = inBuffer.append(inLine + "\n");
}
stdin.close();
System.out.println("Output messages of cmd " + inBuffer.toString());
while ((errLine = stderr.readLine()) != null) {
errBuffer = errBuffer.append(errLine + "\n");
}
stderr.close();
System.out.println("Error messages of cmd " + errBuffer.toString());
process.waitFor();
int exitCode = process.exitValue();
System.out.println("cmd " + " exited with code " + exitCode);
}
# 1 楼答案
试着使用这些东西:
重复这一点,以确保安全
并改变变量。那应该行
这是验证密码
# 2 楼答案
while ((inLine = stdin.readLine()) != null) {
和while ((errLine = stderr.readLine()) != null) {
都将阻止主线程,直到数据可用。可能是您的命令正在向stderr中吐出一些内容,但您无法看到它,因为您的主线程在stdin read循环中被阻塞最好使用单独的线程使用stdin和stderr,这样可以更容易地调试代码