java linux 调用shell脚本传参

文章标签: java,linux
2014-10-30 21:49:56     25 人阅读    

例子:

       

 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.itmmd.com/201410/85.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

apache Tomcat配置SSL(https)详细步骤   上一篇
下一篇  常见的nginx配置

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!