如何从JAVA程序向终端发送非命令数据?

时间:2012-04-27 08:05:44

标签: java terminal command send

  

可能重复:
  How to send a string to the terminal without having it to be a standard command?

我已经就此主题发布了一个问题,但过了一会儿,我仍然没有解决我的问题。 Marko Topolnik向我展示了一些可能的答案,但我仍被封锁。

这是我的问题:

我有一个Java程序,在某些时候需要连接到外部程序。 为此,我实现了以下功能:

public void login(String password) throws IOException
{
    final Process p = Runtime.getRuntime().exec("p4 login");
    final BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    System.out.println("going to read line");

    System.out.println(in.read());
    System.out.println("read line");
    new PrintWriter(p.getOutputStream(),true).println(password);
    System.out.println("password sent");
    String line;
    while ((line = in.readLine()) != null)      
    {      
        System.out.println("printing line");
        System.out.println(in.read());
        System.out.println(line);
        System.out.println("printed line");
        if (line.startsWith("User")) loggedIn=true;
    }        
    loggedIn=false;
}

此功能成功发送" p4登录"到终点站。 此时终端的响应是:"输入密码:"

然后,我尝试将密码发送到终端,但我找不到办法。我尝试过使用与第一次相同的命令,但exec命令只能发送标准命令。

这是我first post的问题:我用exec()命令发送密码,这就是我尝试过的原因

new PrintWriter(p.getOutputStream()).println(password); 

System.out.println(s);在我的功能中始终显示"输入密码:",这不是我要找的。

我已经尝试刷新输出,这是在我的旧帖子中向我建议的,在发送的第一个命令和第二个命令之间等待一段时间,但仍然没有。

如果有人知道我该怎么做,那就太好了。

1 个答案:

答案 0 :(得分:0)

这段代码将永远循环,但它会打印出程序发送给你的任何内容:

public boolean login(String password) throws Exception {
  final Process p = Runtime.getRuntime().exec("p4 login");
  final BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
  final char[] buf = new char[20];
  System.out.println(new String(buf, 0, in.read(buf)));
  System.out.println("Sending password");
  new PrintWriter(p.getOutputStream(),true).println(password);
  System.out.println("Password sent");
  int read;
  while ((read = in.read(buf)) != -1) {
    System.out.print(new String(buf, 0, read));
    System.out.flush();
  }
  return false;
}