`
qindongliang1922
  • 浏览: 2157349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116633
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124891
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58941
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70629
社区版块
存档分类
最新评论

Java如何调用Linux命令

    博客分类:
  • JAVA
阅读更多

(方式一)适合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),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,我们同行。


3
9
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics