`

Java如何调用script

    博客分类:
  • JAVA
 
阅读更多

在Java 中如何调用各种脚本(shell,perl,python...)? 我们肯定会想到使用 Runtime.getRuntime().exec(cmd). 不过实际中根据需求会有更多更复杂的处理。 当有很多的脚本需要任务调度, 现在粗略给出一种解决办法 。
1. 开启一个服务端(单独的线程)专门来接受脚本

public class ScriptRunnerService {
    private static int port = 4444;
    public static void main(String[] args) {
        ScriptRunnerService srs = new ScriptRunnerService();
        String hostIp = args[0];
        String hostPort =  args[1];
        srs.go(hostIp, hostPort);
    }

    public void go(String hostIp, String hostPort) {
        try {
            ServerSocket listener = new ServerSocket(Integer.valueOf(hostPort), 0, InetAddress.getByName(hostIp));
            Socket clientSocket;
            while (true) {
                clientSocket = listener.accept();
                Thread t = new Thread(new ServiceRunner(clientSocket));
                t.start();
            }
        } catch (IOException ioe) {
            System.out.println("IOException on socket listen: " + ioe);
        } finally {
        }
    }
    class ServiceRunner implements Runnable {
        private Socket clientSocket;
        ServiceRunner(Socket clientSocket) {
            this.clientSocket = clientSocket;
        }
        @Override
        public void run() {
            int result = 1;
            String line;
            StringBuilder command = new StringBuilder();
            BufferedReader br = null;
            BufferedWriter bw = null;
            try {
                System.out.print("command receiving...");
                br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                if ((line = br.readLine()) != null) {
                    command.append(line);
                }
                bw = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
                System.out.println(command);
                Process p = Runtime.getRuntime().exec(command.toString());
                result = p.waitFor();
               p.destroy();
                write(bw, command.toString() + "\r\n");
            } catch (InterruptedException ie) {
                write(bw, ie.getMessage() + "\r\n");
            } catch (IOException ioe) {
                write(bw, ioe.getMessage() + "\r\n");
            } finally {
                write(bw, "..Result.." + result + "\r\n");
                write(bw, "..Command.." + command.toString() + "\r\n");
                write(bw, "Host...." + clientSocket.getInetAddress().getHostAddress() + "\r\n");
                try {
                    clientSocket.close();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
                System.out.println("\t\tcommand finished with result: " + result);
            }
        }
    }
    private void write(BufferedWriter bw, String msg) {
        try {
            bw.write(msg);
            bw.flush();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

 

 public class AppInitializer{
   public void  execScriptService(){
   	String[] envParams = {"java -cp";, completeClasspath,   ScriptRunnerService.class.getName(),“127.0.0.1”,“4445”};
    	ScriptRunnerService       scriptRunnerProcess = Runtime.getRuntime().exec(envParams);
}
 

 

2. 客户端专门接受服务端的返回消息

 

public class SocketTransport {
    protected Logger log = new Logger(SocketTransport.class.getName());
    public String query(String host, int port, String queryString) throws IOException {
        String line;
        BufferedReader rd = null;
        BufferedWriter wr = null;
        Socket serverSocket = null;
        StringBuilder response = new StringBuilder();
        try {
            serverSocket = new Socket(InetAddress.getByName(host), port);
            wr = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream(), "UTF8"));
            log.warn("sending request: %s to %s:%s ", queryString, host, port);
            wr.write(queryString + "\r\n");
            wr.flush();
            rd = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
            while ((line = rd.readLine()) != null) {
                response.append(line);
            }
        } catch (UnknownHostException e) {
            log.error(e);
            throw new IOException(e);
        } finally {
            IOUtils.closeQuietly(wr);
            IOUtils.closeQuietly(rd);
            if (serverSocket != null) {
                serverSocket.close();
            }
        }
        log.warn("finish request: ", queryString);
        return response.toString();
    }
}

 

3.  执行脚本

 

public class ScriptTest {
    public static void execute(String path , String script, String param) throws IOException, InterruptedException{
       if(...){

        SocketTransport st = new SocketTransport();
        String msg = st.query("127.0.0.1", 4445, "java -version");
        System.out.println(msg);
     else{

          Process p = Runtime.getRuntime().exec(path + script + params);
            System.out.println("Executing for "+type+": " + path + script + params);
            p.waitFor();
            p.destroy();
          }        
    }
    
}
 

 

 

分享到:
评论

相关推荐

    java浏览器调用ie内核

    总结来说,Java调用IE内核主要涉及Java与ActiveX控件的交互,这一技术虽然有一定的历史背景,但在现代Web开发中已经较少使用,更多的现代解决方案倾向于使用标准Web技术或者基于Chromium的框架。理解和学习这个知识...

    Java调用javaScript代码

    本文将深入探讨“Java调用JavaScript代码”的技术实现,以及它在实际项目中的应用场景。 Java和JavaScript虽然名字相似,但它们是两种完全不同的编程语言,各自有其特定的用途。Java是一种静态类型的、面向对象的...

    Java调用sqlplus执行定制的sql脚本

    在IT行业中,数据库...总之,Java调用SQL*Plus执行定制的SQL脚本是数据库自动化的一个重要手段,通过选择合适的方式,可以大大提高工作效率,减少人为错误。理解并熟练掌握这一技巧,对提升你的IT专业技能大有裨益。

    Java代码调用HTML5中的JS函数算法

    "java调用js方法.doc"很可能是详细描述如何从Java调用JS函数的步骤和示例。 在实际应用中,Java代码可能会通过Ajax发送一个请求到服务器,服务器解析请求后调用对应的JS函数,例如在"des.js"中执行解密操作,然后将...

    Java调用Python.zip

    本示例探讨了如何使用Java调用Python脚本,实现数据交换和处理。Java和Python结合使用,可以充分利用Java的高效性能和Python的易用性及丰富的库资源。 Java调用Python主要依赖于Jython、Apache Beam、Java的Runtime...

    java jna 调用pytorch c++模型推理

    Java JNA调用PyTorch C++模型推理是一种在Java应用程序中利用PyTorch的深度学习能力的方法。JNA(Java Native Access)是Java平台上的一个库,它允许Java代码直接调用本机库(如C++编写的库),而无需编写JNI(Java ...

    java调用实体打印机打印pdf文件

    在Java编程环境中,调用实体打印机来打印...总之,Java调用实体打印机打印PDF文件涉及到PDF处理库的使用、打印服务API的配置以及错误处理等多个环节。正确理解和运用这些知识点,可以帮助你构建一个可靠的PDF打印系统。

    java调用python脚本

    例如,"Java调用Python脚本"是一个常见的需求,特别是在数据处理、科学计算或机器学习等场景中,Python的强大库可以与Java的稳定性和企业级应用能力相结合。本教程将详细讲解如何在Java程序中调用Python脚本。 首先...

    百度地图生成与调用(Java script)

    自己写的几个调用百度地图API的实用性方法 HTML和JS代码都有

    java2script

    例如,多线程和本地方法调用在JavaScript中通常是不可行的,因此Java2Script需要对这些情况进行特殊处理或者提供替代方案。此外,由于JavaScript的动态特性和Java的静态特性之间的差异,性能可能成为使用Java2Script...

    java调用脚本语言笔记(jython,jruby,groovy)

    Java调用Jython、JRuby和Groovy提供了强大的动态编程能力,使得开发者可以在Java应用中充分利用这些脚本语言的优点。了解如何在Java中正确地调用和管理这些脚本,对于提升开发效率和应用功能都有很大帮助。在实际...

    《kettle中调用java类》示例代码

    首先,Kettle支持两种方式来调用Java类:使用“Java Class”步骤和使用“Execute Java Script”步骤。"Java Class"步骤允许直接执行一个预编译的Java类,而"Execute Java Script"步骤则用于运行Java Script...

    Java调用Groovy

    Java调用Groovy是一种常见的技术,特别是在开发过程中需要动态脚本支持时。Groovy是一种基于JVM(Java Virtual Machine)的、动态类型的编程语言,它与Java有着良好的互操作性,能够无缝集成到Java项目中。这篇博客...

    java调用shell脚本完美封装

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如自动化运维、文件管理等,这时就可能需要用到调用Shell脚本。本文将详细介绍如何在Java中完美封装shell脚本的调用方法,并提供相关的...

    java调用bat批处理与sh脚本

    这篇博客“java调用bat批处理与sh脚本”将详细讲解如何在Java程序中实现这一功能。 首先,我们要理解Java是如何与操作系统进行交互的。Java提供了`Runtime`类和`ProcessBuilder`类,这两个类都可以用来执行外部命令...

    java调用js代码实现动态配置

    ### Java调用JS代码实现动态配置 在现代软件开发中,动态配置的需求越来越普遍,特别是在不希望频繁重启服务的情况下更新业务逻辑或算法时。本文将详细介绍如何利用Java调用JavaScript来实现这一目标,并通过一个...

    android使用webView实现java程序与js脚本的相互调用

    Java调用JavaScript 使用`addJavascriptInterface()`方法暴露一个Java对象给JavaScript环境,这样JavaScript就可以调用这个对象的方法: ```java webView.addJavascriptInterface(new Object() { @...

    php调用java jar包

    php调用java类的方法 需要将java工程打包称jar包之后调用

    Java script脚本常用代码

    ### Java Script脚本常用代码详解 #### 一、概述 JavaScript是一种广泛使用的脚本语言,尤其在网页开发中扮演着重要角色。对于初学者来说,掌握一些基础且常用的JavaScript代码片段是十分必要的。本文将根据提供的...

    Java_script脚本常用代码(全)

    - `clearTimeout()`:取消由 `setTimeout()` 设置的延时调用。 - 示例:`clearTimeout(timeoutId);` - `clearInterval()`:取消由 `setInterval()` 设置的定时调用。 - 示例:`clearInterval(intervalId);` ###...

Global site tag (gtag.js) - Google Analytics