(方式一)适合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),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,我们同行。
分享到:
相关推荐
Java程序调用linux命令、脚本,支持程序在服务器上使用linux命令。工具类为:ProcessUtil,支持单个命令和批量命令执行函数,同时在工具类中添加了getFileLineNumByCmd函数支持通过linux命令获取文件行数的样例。
Java调用Linux命令 调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例, (注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例), 该实例可用于控制进程或取得进程的...
java调用linux系统命令的封装工具类。
java调用Linux命令获取输出流,用于解决获取不到输出流的方法
java调用linux命令.用来测试使用和参考
前言我所在项目组刚接到一个 Java 重启 keepalived 需求,具体需求是通过 Java 接口去操作安装在Linux 系统上的 keepalived,根
java 执行linux命令源码,java调用shell脚本源码,java web发布war到tomcat,servlet文件上传,ajax文件上传。 java web 上传war包、停止、启动、发布tomcat。 命令修改成自己的目录即可使用。
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
java连接linux,执行shell命令的工具类 sshxcute.jar
java代码执行linux系统命令
java调用操作系统命令源码工具类,包含远程输入用户名和密码方式及本地调用,同时兼容处理了Windows及Linux命令和执行结果的返回。使用者可以通过工具类方法直接调用,传入操作系统的命令即可执行,方法返回操作结果...
java调用执行系统命令的工作类。包括在Linux和windows系统,已经系统错误输出流的监控。
5、合并文件使用的Linux命令是:cat /home/leo/sd_000.txt /home/leo/sd_001.txt /home/leo/sd_002
NULL 博文链接:https://xieruilin.iteye.com/blog/1150010
基于sshConnect的linux服务器的shell命令调用,并获取命令返回结果的实例。亲测有效!
在开发的过程中,要善于利用JAVA面向对象编程的优势,与Linux/Unix命令或Shell脚本的优势,并将二者相结合。
java通过ssh调用centos7指令,获取磁盘空间使用率、磁盘空间使用情况、网络使用情况,CPU使用率,内存使用率
在linux上,使用java调用ffmpeg命令,实现在特定时间上对视频截图
java ping ip ping命令 ping工具类 支持linux和windows等所有平台 Ping是Windows下的一个命令 在Unix和Linux下也有这个命令。 ping也属于一个通信协议,是TCP/IP协议的一部分 利用“ping”命令可以检查网络是否连通...
ping 在Java中Linux中执行ping的服务器-客户端实现==================================系统要求运行该应用程序的系统必须已安装Java 8。==================================编译下载项目。 如果要从那里运行它,请...