前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA调用Shell脚本

JAVA调用Shell脚本

作者头像
Java学习123
发布2018-05-16 14:13:31
3K0
发布2018-05-16 14:13:31
举报
文章被收录于专栏:Java学习123Java学习123

在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。

JAVA调用很简单,例子如下:

首先是shell脚本

/users/bmcmsend_linux/server/bin/msend -n @10.26.202.27:1828#mc -a TRKUTIL_EV -v -j /users/bmcmsend_linux/server/cache  -l /users/bmcmsend_linux/server -b "OBJNAME=APPINTFALERT;EVENTCODE=ESB#001#0001;CHARDATE='2016-03-30 08:53:43';CYCLEID=ESB#001;MSG=wx"

然后是JAVA调用代码

import java.io.BufferedReader;  
import java.io.InputStreamReader;  
  
public class RunShell {  
    public static void main(String[] args){  
        try {  
            String shpath="/home/felven/word2vec/demo-classes.sh";  
            Process ps = Runtime.getRuntime().exec(shpath);  
            ps.waitFor();  
  
            BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));  
            StringBuffer sb = new StringBuffer();  
            String line;  
            while ((line = br.readLine()) != null) {  
                sb.append(line).append("\n");  
            }  
            String result = sb.toString();  
            System.out.println(result);  
            }   
        catch (Exception e) {  
            e.printStackTrace();  
            }  
    }  
}

其实就是一个Process类进行调用,然后把shell的执行结果输出到控制台下。

需要注意的是,在调用时需要执行waitFor()函数,因为shell进程是JAVA进程的子进程,JAVA作为父进程需要等待子进程执行完毕。

另外在eclipse控制台输出时并不是边执行边输出,而是shell全部执行完毕后输出,所以如果执行较为复杂的shell脚本看到没有输出时可能会误以为没有执行,这个时候看看终端里面的进程,TOP命令一下就能看到其实shell脚本已经开始执行了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档