如何向java进程传递多个密码

如何向java进程传递多个密码,java,process,Java,Process,我使用运行时执行一个命令,该命令接受密码两次(如:输入密码、验证密码)。我正在使用以下代码。我面临的问题是程序挂起,因为它正在等待验证密码。第一个密码被正确传递(我通过从我的命令和java代码中删除verify password来验证它是否有效),verify password没有被传递到命令,并且命令不确定地等待verify password。如果有人有任何建议,请告诉我 try { runtime = Runtime.getRuntime(); process

我使用运行时执行一个命令,该命令接受密码两次(如:输入密码、验证密码)。我正在使用以下代码。我面临的问题是程序挂起,因为它正在等待验证密码。第一个密码被正确传递(我通过从我的命令和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);


    }
试试看
{
runtime=runtime.getRuntime();
process=runtime.exec(“”);
字符串inLine=“”;
字符串errLine=“”;
StringBuffer inBuffer=新的StringBuffer();
StringBuffer errBuffer=新的StringBuffer();
PrintWriter pw=新的PrintWriter(process.getOutputStream());
打印(“+”\n”);
打印(“+”\n”);
pw.flush();
BufferedReader stdin=新的BufferedReader(新的InputStreamReader(
process.getInputStream());
BufferedReader stderr=新的BufferedReader(新的InputStreamReader(
process.getErrorStream());
而((inLine=stdin.readLine())!=null){
inBuffer=inBuffer.append(内联+“\n”);
}
stdin.close();
System.out.println(“cmd的输出消息”+inBuffer.toString());
而((errLine=stderr.readLine())!=null){
errBuffer=errBuffer.append(errLine+“\n”);
}
stderr.close();
System.out.println(“cmd的错误消息”+errBuffer.toString());
process.waitFor();
int exitCode=process.exitValue();
System.out.println(“cmd”+”退出,代码为“+exitCode”);
}
while((inLine=stdin.readLine())!=null){
while((errLine=stderr.readLine())!=null){
将阻塞主线程,直到数据可用。可能是您的命令正在向stderr中吐出某些内容,但您无法看到它,因为您的主线程在stdin读取循环中被阻塞了


最好使用单独的线程使用stdin和stderr,您可以更轻松地调试代码

尝试使用以下内容:

System.out.println("<<password>>");
String pw;
BufferedReader stdin = new BufferedReader(new InputStreamReader(
          System.in));
while ((pw = stdin.readLine()) != null){ //Waits for a reply for the first password
    if (pw != ""){
        break; //This breaks the loop, and 'pw' is the password entered.
    }
}
System.out.println(“”);
串pw;
BufferedReader stdin=新的BufferedReader(新的InputStreamReader(
系统(in),;
而((pw=stdin.readLine())!=null){//等待第一个密码的回复
如果(pw!=“”){
break;//这会中断循环,“pw”是输入的密码。
}
}
重复这一点,以确保安全

>

并改变变量。这应该行得通

这是验证密码

System.out.println("<<verifypassword>>");
String pw2;
BufferedReader stdin2 = new BufferedReader(new InputStreamReader(
          System.in));
while ((pw2 = stdin2.readLine()) != null){ //Waits for a reply for the first password
    if (pw2 != ""){
        break; //This breaks the loop, and 'pw' is the password entered.
    }
}
System.out.println(“”);
字符串pw2;
BufferedReader stdin2=新的BufferedReader(新的InputStreamReader(
系统(in),;
而((pw2=stdin2.readLine())!=null){//等待第一个密码的回复
如果(pw2!=“”){
break;//这会中断循环,“pw”是输入的密码。
}
}

在您被要求写入密码之前,进程是否向控制台输出任何内容?不,在我写入密码之前,它不会向控制台输出任何内容。因此,如果您从命令行运行程序,它将不会显示任何类型的提示??如果我们直接在命令行上运行命令,我误解了您前面的问题提示输入密码和验证密码感谢您的回复。上面给出的代码似乎是用于从命令行读取密码。在我的情况下,我使用运行时执行的命令是两次执行密码(密码和验证密码),我希望将值传递给进程。执行此操作时,进程将读取第一个密码,并等待验证密码(即使我已向进程写入了两次密码)PrintWriter pw=new PrintWriter(process.getOutputStream();pw.print(“+”\n”);pw.print(“+”\n”);pw.print(“+”\n”);pw.flush();那么,您想要的是一个程序执行一个以密码作为参数传递的程序?