有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

其中,预期输出为: 莱纳斯pts/1 Dec 10 03:48(172.21.235.48)


共 (5) 个答案

  1. # 1 楼答案

    您可以创建一个shell脚本,该脚本将从java程序接收参数(选项)。 然后您可以从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;
    

    现在正在测试中。sh,你抓取参数并运行命令-

    /usr/bin/who $1 (needs to check, not sure)
    

    希望这有帮助

  2. # 2 楼答案

    谢谢你们的回复

    从“dystroy”的回答中,我了解到-m正在制造问题

    我尝试了--m,结果成功了:)

  3. # 3 楼答案

    在调用waitFor()之前,尝试使用进程中的输入流

  4. # 4 楼答案

    请尝试此代码。它为我工作,并返回与who -mUNIX命令相同的输出

    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();
                    }
    
            }
    
  5. # 5 楼答案

    在这种情况下,您不应该传递-m选项

    这对我很有用:

    Process p1 = Runtime.getRuntime().exec(new String[] {"/usr/bin/who"});