当前位置: 首页 > 面试题库 >

如何在不作为标准命令的情况下将字符串发送到终端?

东门秦迟
2023-03-14
问题内容

我正在用Java编写一个程序,该程序需要使用终端命令才能工作。我的功能基本上看起来像这样:

public void sendLoginCommand() throws IOException
{
    System.out.println("\n------------Sending Login Command------------\n");
    String cmd="qskdjqhsdqsd";
    Runtime rt = Runtime.getRuntime();
    Process p=rt.exec(cmd);
}
public Process sendPassword(String password) throws IOException
{
    System.out.println("\n------------Sending Password------------\n");
    String cmd=password;
    Runtime rt = Runtime.getRuntime();
    Process p=rt.exec(cmd);
    return p;
}
public void login(String password) throws IOException
{
    sendLoginCommand();
    Process p = sendPassword(password);
    System.out.println("\n------------Reading Terminal Output------------\n");
    Reader in = new InputStreamReader(p.getInputStream());

    in = new BufferedReader(in);
    char[] buffer = new char[20];
    int len = in.read(buffer);
    String s = new String(buffer, 0, len);
    System.out.println(s);
    if(s.equals("Password invalid.")) loggedIn=false;
    else loggedIn=true;
}

在这里,程序正确发送了p4登录命令,但是随后,终端要求输入密码。当我使用与sendLoginCommand()相同的行时,程序将返回错误。显然,我们只能通过Process发送标准命令。我希望有人知道如何向终端发送普通字符串

先感谢您


问题答案:

我找到了我问题的答案。

问题在于终端的第二个响应实际上是在第一个响应中,而密码必须在中间发送。这是代码(我同意,我的解释有点含糊):

    String s="";
    Process p = Runtime.getRuntime().exec("p4 login");     
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));    
    char a=(char)in.read();
    while(a>0 && a<256)
    {

        a=(char)in.read();
        if(nb==14) new PrintWriter(p.getOutputStream(),true).println(password); 
        if(nb>16) s=s+a;
        nb++;
    }
    if(s.startsWith("User")) loggedIn=true;
    else loggedIn=false;


 类似资料: