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