无法捕获“的输出”;世卫组织-m“;JAVA中的命令

无法捕获“的输出”;世卫组织-m“;JAVA中的命令,java,unix,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();

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

在这种情况下,您不应该通过
-m
选项

这对我很有用:

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

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

这对我很有用:

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

在调用
waitFor()

之前,尝试使用来自进程的输入流。在调用
waitFor()
之前,尝试使用来自进程的输入流。您可以创建一个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;
现在在test.sh中,获取参数并运行命令-

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

希望这有帮助。

您可以创建一个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;
现在在test.sh中,获取参数并运行命令-

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

希望这能有所帮助。

谢谢大家的回复

从“dystroy”的回答中,我明白了-m是在制造问题


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

谢谢大家的回复

从“dystroy”的回答中,我明白了-m是在制造问题


我尝试了--m,它成功了:)

请尝试这个代码。它为我工作,并返回与
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();
                }

        }

请尝试此代码。它为我工作,并返回与
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();
                }

        }

在这种情况下,运行shell脚本和命令本身没有区别。这到底有什么帮助?这不是一个解决办法,因为它不能解决问题(它不会改变任何东西)。如何?在shell脚本中,您可以根据需要调用命令。我刚刚调用了shell脚本,它将调用带参数的必需命令。在这种情况下,运行shell脚本和命令本身没有区别。这到底有什么帮助?这不是一个解决方法,因为它不能解决问题(它不会改变任何东西)。如何?在shell脚本中,您可以根据需要调用命令。我刚刚调用了shell脚本,它将调用带有参数的必需命令。“who”返回所有登录用户的详细信息。我需要我的登录数据。如何确保哪一个是我登录的详细信息(who-m执行此操作)“who”返回所有登录用户的详细信息。我需要我的登录数据。如何确保哪一个是我登录的详细信息(who-m负责此操作)