文档章节

JAVA调用Shell脚本

yzbty23
 yzbty23
发布于 2016/04/13 09:22
字数 386
阅读 178
收藏 4

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

在实际项目中,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脚本已经开始执行了。


© 著作权归作者所有

yzbty23
粉丝 122
博文 285
码字总数 248292
作品 0
浦东
程序员
私信 提问
请教linux下java调用shell实现自动重启的问题

应用场景是实现java程序的远程升级,java程序运行在linux下,是一个后台一直运行的服务。 大概流程如下: 1.java程序判断接收到升级包,调用linux shell脚本来进行升级 Runtime.getRuntime()...

风之刀
2017/06/06
482
0
spark程序中调用shell脚本

scala直接调用shell脚本是不行的,但是可以利用java调用shell脚本然后在spark代码中引入java代码实现。 参考:java代码调用shell脚本 shell脚本必须在spark的driver端调用,在worker端只能处...

神秘的寇先森
02/27
0
0
关于 Java Scripting API 您不知道的 5 件事

现在,许多 Java 开发人员都喜欢在 Java 平台中使用脚本语言,但是使用编译到 Java 字节码中的动态语言有时是不可行的。在某些情况中,直接编写一个 Java 应用程序的脚本 部分 或者在一个脚本...

红薯
2010/09/12
533
2
通过Shell脚本用JDBC连数据库脱离项目框架执行Java业务流程

一.概述 如果项目中需要使用到定时任务来完成某些业务,一般有两种做法:定时任务依赖于项目;定时任务用批处理(windows执行)或者shell脚本(Linux)启动,不依赖于项目。 个人觉得,定时任...

谢思华
2015/08/10
681
0
java调用shell脚本返回值问题,求助!!!!!!!!

刚搞shell脚本这块,现在遇到个问题,望知道的大神帮忙解答下,感谢啊! 问题是这样的: java后台调用shell脚本,脚本作用是解析数据库用户名(dbuserName)和数据库密码(dbuserPwd),我打算让d...

踩单车的老爷爷
2016/02/23
548
3

没有更多内容

加载失败,请刷新页面

加载更多

密码加密与微服务鉴权JWT详细使用教程

[TOC] 1.1、了解微服务状态 微服务集群中的每个服务,对外提供的都是Rest风格的接口,而Rest风格的一个最重要的规范就是:服务的无状态性。 什么是无状态? 1.服务端不保存任何客户端请求者信...

庭前云落
20分钟前
6
0
Xamarin.FormsShell基础教程(9)Shell相关类体系

Xamarin.FormsShell基础教程(9)Shell相关类体系 在Shell中,最为主要的类是Shell类。Shell类实现了大多数应用程序所需的基本UI功能的页面。除此以外,常用的类还有ShellContent、Tab、Fly...

大学霸
22分钟前
4
0
聊聊MVC、MVP、MVVM吧

先来介绍下本文结构: 三种框架的具体概念 在安卓开发上的写法、优缺点 1.概念 1.1 MVC MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模...

二营长的意大利炮手
39分钟前
4
0
如果解释Python,什么是.pyc文件?

我已经了解Python是一种解释型语言......但是,当我查看我的Python源代码时,我看到.pyc文件,Windows将其识别为“编译的Python文件”。 这些来自哪里? #1楼 Python代码经历了两个阶段。 第...

javail
44分钟前
4
0
.NET Core初览

初览的应用场景为游戏服务器开发。所以测试在侧重点上更强于IO和密集型计算 TODO

梦想游戏人
47分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部