Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ubuntu上的运行时exec_Java_Linux_Ubuntu - Fatal编程技术网

Java ubuntu上的运行时exec

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",

我尝试从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", "-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实际上并不是一个命令行,它只是一个执行程序的命令。