Java如何调用Linux命令


(方式一)适合Java调用本地的Liunx无须任何依赖包

    /***
     * 第一种方法,仅仅执行命令无须关注返回结果
     * @throws Exception
     */
    public static void exeCmd() throws Exception{
        Runtime r = Runtime.getRuntime();
        //执行linux命令,不关心返回结果,此处,可以执行一个shell脚本,或者python脚本
        Process p = r.exec("tesseract 12.jpg  ko ");
        p.waitFor();
    }


    /**
     * 第二种方法,需要执行命令完后的返回结果
     * @return  result
     * @throws Exception
     */
    public static String getCodeResult()throws Exception{
        exeCmd();
        //执行一个命令需要展示返回结果的
        Runtime r = Runtime.getRuntime();
        Process p = r.exec("cat ko.txt ");
        p.waitFor();
        BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";
        StringBuffer sb=new StringBuffer();
        while ((line = b.readLine()) != null) {
          sb.append(line).append("\n");
        }
       System.out.println("result: "+sb.toString());
        b.close();
        return sb.toString();

    }



(方式二)适合远程调用不在同一台机器上的Linux命令,这种方式需要使用
开源的jsch , 官网:http://www.jcraft.com/jsch/ , maven依赖如下:

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.53</version>
</dependency>



一个demo代码如下:

package com.java.ssh;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class RemoteSSH {


     /**
       * 远程 执行命令并返回结果调用过程 是同步的(执行完才会返回)
       * @param host    主机名
       * @param user    用户名
       * @param psw    密码
       * @param port    端口
       * @param command    命令
       * @return
       */
      public static String exec(String host,String user,String psw,int port,String command){
        String result="";
        Session session =null;
        ChannelExec openChannel =null;
        try {
          JSch jsch=new JSch();
          session = jsch.getSession(user, host, port);
          java.util.Properties config = new java.util.Properties();
          config.put("StrictHostKeyChecking", "no");
          session.setConfig(config);
          session.setPassword(psw);
          session.connect();
          openChannel = (ChannelExec) session.openChannel("exec");
          openChannel.setCommand(command);
//          int exitStatus = openChannel.getExitStatus();
          openChannel.connect();  
                InputStream in = openChannel.getInputStream();  
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String buf = null;
                while ((buf = reader.readLine()) != null) {
                    result+= new String(buf.getBytes("gbk"),"UTF-8")+" \n";
                }  
        } catch (JSchException | IOException e) {
          result+=e.getMessage();
        }finally{
          if(openChannel!=null&&!openChannel.isClosed()){
            openChannel.disconnect();
          }
          if(session!=null&&session.isConnected()){
            session.disconnect();
          }
        }
        return result.trim();
      }


    public static void main(String[] args) {

        String exec = exec("192.168.1.187", "user", "pwd", 22, "tesseract 12.jpg  ko && cat ko.txt  ");
 //   String exec = exec("192.168.1.187", "user", "pwd", 22, "ls -l  ");
        System.out.println(exec);    


    }


}



有什么问题 可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,我们同行。


猜你喜欢

转载自qindongliang.iteye.com/blog/2292352
今日推荐