zoukankan      html  css  js  c++  java
  • linux 调用shell脚本传参

    例子:


            boolean execResult = true;
            BufferedReader br = null;
            try
            {
                //linux脚本test.sh需要另个入参(可以有0或多个参数)
       String account = "test"
                String pwd = "12345";
       String shellPath = "...脚本的实际路径"
                ProcessBuilder b = new ProcessBuilder("sh", "test.sh", account,
                        password);
                b = b.directory(new File(shellPath));
                Process rt = b.start();
               
                String line = "";
       //脚本返回的信息流
                br = new BufferedReader(new InputStreamReader(rt.getInputStream()));
               
                while (null != (line = br.readLine()))
                {
                    //对结果做处理
                }
               
               
                rt.destroy();
            }
            catch (Exception e)
            {
                execResult = false;
            }
           
            finally
            {
                if (null != br)
                {
                    IOUtils.closeQuietly(br);
                }
            }
           

    java5引入了ProcessBuilder类,该类的功能于Runtime.exec系列方法相同,都是启动一个进程。
    主要区别是:ProcessBuilder是可以更好控制启动的进程,且可以重用;但是exec方法没有这种效果;
    ProcessBuilder是从1.5加进来的,而exec系列方法是从1.0开始就有的,后续版本不断的重载这个方法,到了1.5已经有6个之多。
    但是,官方的api没有任何文档说明这个两个区别,我想主要的是OO的思想,导致了这个新类的产生,功能上没什么变化
    具体内容可以参见java5的api文档或者java in a nutshell


    使用ProcessBuilder的例子

    package net.java2000.util;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.Arrays;

    public class TestProcessBuilder {
     public static void main(String args[]) throws Exception {
      ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir");
      builder.directory(new File("e:/"));
      Process process = builder.start();
      InputStream is = process.getInputStream();
      InputStreamReader isr = new InputStreamReader(is, "GBK");
      BufferedReader br = new BufferedReader(isr);
      String line;
      System.out.printf("Output of running %s is:", Arrays.toString(args));
      while ((line = br.readLine()) != null) {
       System.out.println(line);
      }
     }
    }

      总结:

      ProcessBuilder为进程提供了更多的控制,例如,可以设置当前工作目录,还可以改变环境参数。而Process的功能相对来说简单的多。

      ProcessBuilder是一个final类,有两个带参数的构造方法,你可以通过构造方法来直接创建ProcessBuilder的对象。而 Process是一个抽象类,一般都通过Runtime.exec()和ProcessBuilder.start()来间接创建其实例

    http://www.cnblogs.com/taven/archive/2011/12/17/2291460.html

  • 相关阅读:
    如何根据关键字匹配度排序
    LeetCode 题解目录
    Spring Boot、Cloucd 学习示例
    JavaScript工具库
    使用 Docker 部署 Spring Boot 项目
    LeetCode 寻找两个有序数组的中位数
    Bean 生命周期
    Dubbo支持的协议
    MySQL组成模块
    Spring Boot 搭建TCP Server
  • 原文地址:https://www.cnblogs.com/qqzy168/p/3135572.html
Copyright © 2011-2022 走看看