java执行linux命令返回结果问题

z6165039 2014-08-12 11:23:13
public static Map<String,String> execShellCommandMap(String command) {

Map<String,String> retmap = new HashMap<String,String>();

if (command == null || command.equals("")){
return null;
}
Process p = null;
Runtime rt = Runtime.getRuntime();

final StringBuffer buf1 = new StringBuffer("");
final StringBuffer buf2 = new StringBuffer("");
Integer retValue = null;
try {
p = rt.exec(command);
// 获取进程的标准输入流
final InputStream is1 = p.getInputStream();
// 获取进城的错误流
final InputStream is2 = p.getErrorStream();
// 启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流
new Thread() {
public void run() {
BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));
try {
String line1 = null;
while ((line1 = br1.readLine()) != null) {
buf1.append(line1);
buf1.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {

}
}
}.start();
new Thread() {
public void run() {
BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
try {
String line2 = null;
while ((line2 = br2.readLine()) != null) {
buf2.append(line2);
buf2.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {

}
}
}.start();
p.waitFor();
retValue = p.exitValue();
// p.destroy();
} catch (Exception e) {
e.printStackTrace();
// try {
// p.getErrorStream().close();
// p.getInputStream().close();
// p.getOutputStream().close();
// } catch (Exception ee) {
// }
}
retmap.put("normaloutput", buf1.toString());
retmap.put("erroroutput", buf2.toString());
retmap.put("retvalue", retValue != null ? retValue.toString():"");
retmap.put("message", buf1.toString()+buf2.toString());
return retmap;

}


问题1:
Map<String,String> map = ShellUtil.execShellCommandMap(HotCust.CHECKHA_EXIST_SCRIPT);
这样调用后的输出结果是不是相当于linux命令行执行命令后 在执行一次 echo $? 的返回结果!

问题2:
如果问题1的答案是 :是
那么为什么我java调用永远返回1:
[root@server11 ~]# chkconfig --list | grep heartbeat
heartbeat 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@server11 ~]# echo $?
0
[root@server11 ~]#

问题3:
最后跪求如何能正确或者linux命令的返回结果!!



在线等。。。。


...全文
964 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
skgary 2014-08-13
  • 打赏
  • 举报
回复
引用 3 楼 z6165039 的回复:
解决了一部分问题了。。。和sh的 b 和 c 环境有关系。。
额,b和c是有区别的啊。。。。
z6165039 2014-08-13
  • 打赏
  • 举报
回复
解决了一部分问题了。。。和sh的 b 和 c 环境有关系。。
z6165039 2014-08-13
  • 打赏
  • 举报
回复
我map里面的retvalue是 echo $? 的结果 是从map里拿出来看 retvalue。。
skgary 2014-08-12
  • 打赏
  • 举报
回复
1. 代码不全啊。。。 返回的是几个stdout, stderr等几个标准输出的屏幕输出。 2。retValue = p.exitValue(); 这个变量里才是你要的 echo $?

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧