解决Runtime.exec() 无法读取命令输出
2016-08-04 10:30
323 查看
关键:输出分2种,标准输出和错误输出,获取正确的输出流才能取到想要的结果
Runtime.exec() 在windows中执行命令的时候,在cmd中能看到输出,但是代码却读取不到,应为我们通常用标准输出流,结果就是读不到结果为null
代码一直等着。也就是为什么我们用 cmdxx 1>result.log 无结果 cmdxx 2>result.log 却能取到结果,1是标准输出 2错误输出
错误输出流例子
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = <span style="color:#ff0000;">new InputStreamReader(stderr); </span>
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
} 标准输出流例子
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("dir");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = <span style="color:#ff0000;">new InputStreamReader(stdin); </span>
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</OUTPUT>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
}
参考:http://berdy.iteye.com/blog/810223
Runtime.exec() 在windows中执行命令的时候,在cmd中能看到输出,但是代码却读取不到,应为我们通常用标准输出流,结果就是读不到结果为null
代码一直等着。也就是为什么我们用 cmdxx 1>result.log 无结果 cmdxx 2>result.log 却能取到结果,1是标准输出 2错误输出
错误输出流例子
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = <span style="color:#ff0000;">new InputStreamReader(stderr); </span>
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
} 标准输出流例子
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("dir");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = <span style="color:#ff0000;">new InputStreamReader(stdin); </span>
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</OUTPUT>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t) {
t.printStackTrace();
}
参考:http://berdy.iteye.com/blog/810223
相关文章推荐
- 解决java使用Runtime.exec执行linux复杂命令不成功问题
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- Runtime.getRuntime().exec()执行一连串命令阻塞解决
- 移动硬盘删除文件时提示“文件或目录损坏且无法读取”的解决方法-chkdsk 命令的巧用
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- Runtime.getRuntime().exec() 输出流阻塞的解决方法
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- Android通过Runtime.getRuntime().exec实现Ping和Traceroute命令时readLine阻塞问题解决
- shell 脚本中,grep无法读取前一个命令结果输出的一个原因
- 移动硬盘删除文件时提示“文件或目录损坏且无法读取”的解决方法-chkdsk 命令的巧用
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- 数 4000 据库备份 runtime.exec 去执行命令 返回 process 读取process的输入流 把数据写入执行文件里
- Java使用Runtime.exec无法打开路径带空格的文件(报错)的解决办法