无法在JAVA中捕获“who -m”命令的输出

时间:2012-12-10 07:35:40

标签: java unix

我想获取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)

5 个答案:

答案 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();
                }

        }