zoukankan      html  css  js  c++  java
  • (转)JAVA调用脚本

    JAVA调用脚本,主要使用Runtime和Process两个类.其中如何对Process进行输入是关键.尤其注意在合适的时候flush输出流.

    调用SHELL脚本可用如下代码进行:

    String command = base +
    		"--lower=0 " +
    		"DEF:var1=" + rrddir + "/" + host +"/Current_Users.rrd:1:AVERAGE " +
    		"CDEF:varf0c320=var1,100,/,100,* " +
    		"AREA:varf0c320#3152A5:'users ' " +
    		"LINE1:var1#000000:'' " +
    		"GPRINT:var1:LAST:'%3.4lf %S Last' " +
    		"GPRINT:var1:MAX:'%3.4lf %S Max' " +
    		"GPRINT:var1:AVERAGE:'%3.4lf %S Average \\l' " +
    		"HRULE:5#FFFF00:'Warning 5 \\n' " +
    		"HRULE:10#FF0000:'Critical 10 \\n' " ;
    String [] cc1 = {"/bin/bash","-c",command};
    		Process p = Runtime.getRuntime().exec(cc1);

    以上是执行SHELL脚本的方法,如果是存在文件里的SHELL脚本,可以用类似Runtime.getRuntime().exec ("/root/bin/test.sh");这种形式来写。

    调用shell后的输出可以通过进程的输入流进行读取,代码如下:

    InputStreamReader ir = new InputStreamReader(p.getInputStream());
      LineNumberReader input = new LineNumberReader(ir);
      String line;
      while ((line = input.readLine()) != null)
      System.out.println(line);
      input.close();
      ir.close();

    最后可以把进程关闭,p.destroy();

    在实际使用中,有种特殊的应用场景,是SHELL脚本生成了图形,然后直接通过输入流显示到页面, 这种情况可以这么去写,在Servlet中,

    Process p = Runtime.getRuntime().exec(cc1);
    		InputStream tempIn = p.getInputStream();
    		response.setContentType("image/png");
    		StreamUtils.streamToStream(tempIn, response.getOutputStream());
    		tempIn.close();

    在Servlet中写回到response,然后在界面中使用:

    <img id="img" alt="绘图未找到历史数据" src="/nkscloudweb2/img.png?host=cailq32&service=HTTP">

    即可,其中img.png是servlet对应的名,其映射为刚才所写的servlet.

    转自:http://blog.csdn.net/magic_wz/article/details/8011908

  • 相关阅读:
    枚举转SelectList扩展方法
    关于Log4Net的使用和配置
    关于Task的认识
    Android Studio 创建不同分辨率的图标
    Android 修改应用图标(Android Studio)
    Android 去除应用标题栏(Android Studio)
    Android Studio 快捷键
    Java 构造器 遇到多个构造器时要考虑用构建器
    Java 构造器 考虑用静态构造方法代替构造器
    Java 深复制和浅复制
  • 原文地址:https://www.cnblogs.com/greywolf/p/3037096.html
Copyright © 2011-2022 走看看