Java ubuntu上的运行时exec
我尝试从java运行wavemon命令并读取输出。 但是我无法使Runtime.exec方法工作 comments中的echo命令工作并打印hello,但是wavemon命令只是返回。Wavemon已经安装,我甚至用它的完整路径/usr/bin/Wavemon作为参数进行了尝试。 什么都不管用Java ubuntu上的运行时exec,java,linux,ubuntu,Java,Linux,Ubuntu,我尝试从java运行wavemon命令并读取输出。 但是我无法使Runtime.exec方法工作 comments中的echo命令工作并打印hello,但是wavemon命令只是返回。Wavemon已经安装,我甚至用它的完整路径/usr/bin/Wavemon作为参数进行了尝试。 什么都不管用 // call wavemon Runtime rt = Runtime.getRuntime(); String[] cmd = { "sh", "-c", "wavemon", "-i wlan1",
// call wavemon
Runtime rt = Runtime.getRuntime();
String[] cmd = { "sh", "-c", "wavemon", "-i wlan1", "-d" };
//String[] cmd = { "sh", "-c","echo hello" };
Process proc = rt.exec(cmd);
proc.waitFor();
// read wavemon output into string
Scanner is = new Scanner(new InputStreamReader(proc.getInputStream()));
StringBuffer buffer = new StringBuffer();
while (is.hasNext()) {
buffer.append(is.nextLine());
}
proc.destroy();
System.out.println(buffer.toString());
wavemon命令的输出以一个空行开始,但由于我使用了扫描仪,这不重要吗
$ wavemon -i wlan1 -d
Configured device: wlan1 (IEEE 802.11abgn)
Security: WPA, WPA2, TKIP, CCMP
...
稍微详细一点,此代码用于Spring框架Spring boot、tomcat容器。您不需要sh-c。试着只使用:
String[] cmd = { "wavemon", "-i","wlan1", "-d" };
另外,您应该在从扫描器中读取行之后放置waitFor,因为这将保持线程直到进程完成。但是,在读取其输出之前,该过程可能不会完成。您甚至可以在不同的线程上读取所有流
这篇文章有关于它的所有细节我试过了,我已经读过这篇文章,但我仍然不知道我做错了什么:可能输出被写入到stderror,您需要读取该流?也可以尝试不使用sh-c部分。我以前从未需要过,即使我在ubuntu上执行类似的程序。如果您使用sh-c,请这样尝试:{sh,-c,wavemon-i wlan1-d}。根据手册页,sh-c读取以下字符串。因此,我假设它期望它是完整的。虽然还没有工作,但仍在尝试一些东西,但显然在sterr上有一个错误:输入不是来自终端wavemon使用isatty命令来检查这一点。这是运行runtime.exec时出现的问题吗?或者只是我电话里的错误论点?是的,那就是问题所在。Javas runtime.exec实际上并不是一个命令行,它只是一个执行程序的命令。