【发布时间】:2013-06-11 07:06:53
【问题描述】:
public class LinuxInteractor {
public static String executeCommand(String command)
{
System.out.println("Linux command: " + command);
try
{
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader bf=new BufferedReader(new InputStreamReader( p.getInputStream()));
String str=bf.readLine();
System.out.println("inputStream is::"+str);
while( (str=bf.readLine()) != null)
{
System.out.println("input stream is::"+str);
}
System.out.println("process started");
}
catch (Exception e) {
System.out.println("Error occured while executing Linux command. Error Description: "
+ e.getMessage());
e.printStackTrace();
}
}
当我通过控制台运行脚本时,它正在工作。但是通过 Java 程序 InputStream(Str) 是 null。
我还有其他方法可以使用吗?
【问题讨论】:
-
1) 阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用
exec并使用ProcessBuilder构建Process。还将String arg分解为String[] args以说明本身包含空格的参数。 2) 我怀疑waitFor调用应该在流消费之后。 -
等待进程退出在你读取它的任何输出之前有点没有意义。如果它的输出缓冲区满了,它就永远不会退出。您的代码中没有
InputStream(Str),但如果您声称Process.getInputStream()返回 null,则很难相信您是正确的。 -
@EJP InputStream is=Process.getInputStream;如果我通过 buffer-reader.its 读取它,它将为空。现在解决了,需要在另一个线程中进行。
-
这没有意义。
InputStream要么为空,要么不是。如果它为空,则根本无法“通过BufferedReader阅读它”。你的意思是你用BufferedReader.readLine()读了一个空值?
标签: java process runtime.exec