我想获取telnet会话的登录用户的IP地址
所以我写了以下代码:
Process p1 = Runtime.getRuntime().exec(new String[] {"/usr/bin/who", "-m"});
p1.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line = reader.readLine();
System.out.println("line=" + line);
reader.close();
但我得到的输出为“null”。
预期输出的位置是: linus pts / 1 Dec 10 03:48(172.21.235.48)
答案 0 :(得分:1)
在这种情况下,您不应传递-m
选项。
这对我有用:
Process p1 = Runtime.getRuntime().exec(new String[] {"/usr/bin/who"});
答案 1 :(得分:0)
在调用waitFor()
之前尝试使用流程中的输入流。
答案 2 :(得分:0)
您可以创建一个shell脚本,它将从您的java程序接收参数(选项)。 然后你可以像这样运行你的shell脚本 -
ProcessBuilder pb = new ProcessBuilder("/PATH/test.sh","-m");
String line;
Process process=pb.start();
java.io.InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
return br;
现在在test.sh中,您可以获取参数并运行命令 -
/usr/bin/who $1 (needs to check, not sure)
希望这有帮助。
答案 3 :(得分:0)
感谢各位回复。
从“破坏”的回复中我明白 -m 正在制造问题。
我试过 - m 并且它有效:)
答案 4 :(得分:0)
请尝试此代码。它对我有用,并返回与who -m
UNIX命令相同的输出。
import java.io.*;
public class UserPB
{
public static void main(String[] args)
{
try {
// ProcessBuilder pb = new ProcessBuilder("/u01/app/chdir/user.sh");
ProcessBuilder pb = new ProcessBuilder("who");
Process p;
p = pb.start();
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
System.out.println("Your Host Details--->"+input.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}