可能重复:
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);在我的功能中始终显示"输入密码:",这不是我要找的。 p>
我已经尝试刷新输出,这是在我的旧帖子中向我建议的,在发送的第一个命令和第二个命令之间等待一段时间,但仍然没有。
如果有人知道我该怎么做,那就太好了。
答案 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;
}