(方式一)适合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依赖如下:
com.jcraft
jsch
0.1.53
一个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),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,我们同行。