无法捕获“的输出”;世卫组织-m“;JAVA中的命令
我想获取telnet会话的登录用户的IP地址 因此,我编写了以下代码:无法捕获“的输出”;世卫组织-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();
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负责此操作)