CmdExecute.java
/**
* @(#) CmdExecute.java Created on 2012-7-19
*
* Copyright (c) 2012 Aspire. All Rights Reserved
*/
package com.aspire.sqmp.mobilemanager.service.adb;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* The class <code>CmdExecute</code>
*
* @author wuyanlong
* @version 1.0
*/
public class CmdExecute {
/**
* Execute a command
*
* @param cmd
* @return
* @throws IOException
*/
public static CmdResponse exec(String cmd) throws IOException {
ReadInputStream msgReadding = null;
ReadInputStream errorMsgReadding = null;
CmdResponse respone = new CmdResponse();
Process process = null;
try {
process = Runtime.getRuntime().exec(cmd);
// 获取进程的错误流
errorMsgReadding = new ReadInputStream(process.getErrorStream());
errorMsgReadding.start();
// 获取正常流信息
msgReadding = new ReadInputStream(process.getInputStream());
msgReadding.start();
// respone
respone.setRunSuccess(process.waitFor() == 0);
respone.setMsg(msgReadding.getMsg());
respone.setErrorMsg(errorMsgReadding.getMsg());
} catch (Exception e) {
respone.setRunSuccess(false);
respone.setErrorMsg(e.getMessage());
e.printStackTrace();
} finally {
try {
if (errorMsgReadding != null)
errorMsgReadding.toStop();
if (msgReadding != null)
msgReadding.toStop();
process.destroy();
} catch (Exception e) {
}
}
return respone;
}
/**
* Execute a command
*
* @param process
* @param command
* @return
*/
public static CmdResponse exec(Process process, String command) {
ReadInputStream msgReadding = null;
ReadInputStream errorMsgReadding = null;
CmdResponse respone = new CmdResponse();
if (process == null) {
respone.setRunSuccess(false);
return respone;
}
DataOutputStream dos = null;
try {
dos = new DataOutputStream(process.getOutputStream());
dos.writeBytes(command + "\n");
dos.writeBytes("exit\n");
dos.flush();
// 获取进程的错误流
errorMsgReadding = new ReadInputStream(process.getErrorStream());
errorMsgReadding.start();
// 获取正常流信息
msgReadding = new ReadInputStream(process.getInputStream());
msgReadding.start();
// respone
respone.setRunSuccess(process.waitFor() == 0);
respone.setMsg(msgReadding.getMsg());
respone.setErrorMsg(errorMsgReadding.getMsg());
} catch (Exception e) {
respone.setRunSuccess(false);
respone.setErrorMsg(e.getMessage());
e.printStackTrace();
} finally {
try {
if (dos != null)
dos.close();
if (errorMsgReadding != null)
errorMsgReadding.toStop();
if (msgReadding != null)
msgReadding.toStop();
process.destroy();
} catch (Exception e) {
}
}
return respone;
}
/**
*
* The class <code>ReadErrorInput</code>
*
* @author wuyanlong
* @version 1.0
*/
static class ReadInputStream extends Thread {
/**
* Running
*/
private boolean running = true;
/**
* Buffer of reading string
*/
private StringBuffer readBuffer = new StringBuffer();
/**
* BufferedReader
*/
private BufferedReader readBr;
private boolean isReading = false;
/**
*
* Constructor
*
* @param is
*/
public ReadInputStream(InputStream is) {
if (is != null)
readBr = new BufferedReader(new InputStreamReader(is));
}
/**
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
@Override
public void run() {
try {
while (running) {
readding();
sleep(250);
}
} catch (IOException e1) {
e1.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (readBr != null)
try {
readBr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
super.run();
}
/**
* Reading
*
* @throws IOException
*/
private void readding() throws IOException {
synchronized (this) {
if (isReading)
return;
isReading = true;
}
if (readBr == null)
return;
while (readBr.ready()) {
readBuffer.append(readBr.readLine());
readBuffer.append("\n");
}
synchronized (this) {
isReading = false;
}
}
/**
* To stop thread.
*/
public void toStop() {
running = false;
}
/**
*
* @return
*/
public String getMsg() {
try {
readding();
} catch (IOException e) {
e.printStackTrace();
}
return readBuffer.toString();
}
}
/**
*
* The class <code>CmdRespone</code>
*
* Return response from execute a command
*
* @author wuyanlong
* @version 1.0
*/
public static class CmdResponse {
/**
* Succes of Running
*/
private boolean isRunSuccess;
/**
* Message of success or faild
*/
private String msg;
/**
* Error message
*/
private String errorMsg;
/**
* Getter of isRunSuccess cmdexecute进程运行成功
*
* @return the isRunSuccess
*/
public boolean isRunSuccess() {
return isRunSuccess;
}
/**
* Setter of isRunSuccess
*
* @param isRunSuccess
* the isRunSuccess to set
*/
public void setRunSuccess(boolean isRunSuccess) {
this.isRunSuccess = isRunSuccess;
}
/**
* Getter of msg
*
* @return the msg
*/
public String getMsg() {
return msg;
}
/**
* Setter of msg
*
* @param msg
* the msg to set
*/
public void setMsg(String msg) {
this.msg = msg;
}
/**
* Getter of errorMsg
*
* @return the errorMsg
*/
public String getErrorMsg() {
return errorMsg;
}
/**
* Setter of errorMsg
*
* @param errorMsg
* the errorMsg to set
*/
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
}
分享到:
相关推荐
确保在非阻塞模式下调用 `connect()` 之后立即检查连接状态。 #### 问题二:NFS 文件无法写入的权限问题 **问题描述**:使用 NFS 挂载远程文件系统时,无法写入文件。 **解决方案**: 1. **检查权限设置**:确认 ...
免责声明:本资源仅供学习和研究使用,请勿用于任何商业用途。使用本资源所产生的任何后果,作者不承担任何责任。
25年背题docx.docx
内容概要:本文主要介绍了截至2023年YOLO系列目标检测算法的最新发展情况,以及一系列的学习资源,涵盖不同版本YOLO的官方资源、重要论文、实践指南、工具框架等各个方面。首先,列举了YOLOv8, v7, v5及其特点与官方GitHub链接;随后,提到了各版YOLO背后的科学依据,即对应的研究论文,特别是v8尚无官方论文的情况下推荐查阅其他官方资料;最后,分享了一些在线教程视频、博客文章、公开数据集(如COCO和PascalVOC)、模型优化方法(TensorRT加速),并且指出了活跃的社区交流平台和持续关注的最佳方式。 适用人群:适用于对深度学习、尤其是计算机视觉中目标检测技术感兴趣的技术从业者及科研人员。 使用场景及目标:为想要深入研究或者应用YOLO算法解决实际问题的研究人员提供参考资料和支持;同时也能为开发者们提供实施项目的指导思路和技术解决方案。 其他说明:文章强调了不断跟进开源社区和技术前沿的重要性,确保能第一时间利用最新的研究成果来提升自身项目效果。
人工智能大模型体验报告2.0.pdf
https://github.com/garriguv/SQLiteMigrationManager.swift
内容概要:本文档详细介绍了如何使用Python Flask框架开发一个校园博客系统的全过程。内容涵盖从技术选型、系统架构设计到核心功能实现的具体步骤,包括用户认证、文章发布和分类浏览等功能模块的设计。文档不仅提供了理论介绍,还给出了具体的代码示例,并通过截图展示了实际运行效果。同时,文中深入探讨了各个技术点的选择原因及其优缺点,帮助读者理解和掌握Web开发的基本技能和技术选型方法。此外,文档特别关注实用性和可操作性,力求使每个步骤都简单明了,方便初次接触Web开发的大学生学习和实践。 适合人群:主要面向正在学习Web开发并希望通过实例加深理解的大学生和技术爱好者。 使用场景及目标:本指南可用于课程作业、个人项目开发或自我学习,帮助学生理解Web开发的技术细节,掌握实际动手能力。 其他说明:除了技术层面的内容外,文中还包含了关于系统测试、性能优化和安全性的讨论,并附带扩展建议,如缓存机制和全文搜索引擎的引入,增加了学习资料的广度和深度。
第十五届蓝桥杯单片机省赛真题解析
534东北特产销售系统,系统包含三种角色:管理员、用户,农户主要功能如下。 【用户功能】 1. **首页:** 浏览东北特产销售系统的主要信息。 2. **公告:** 查看系统发布的重要通知和公告。 3. **新闻信息:** 阅读有关东北特产的最新新闻和信息。 4. **农户:** 浏览和搜索各个农户提供的特产信息。 5. **商品:** 浏览系统中各类特产商品。 6. **个人中心:** 管理个人信息,查看购物车中的商品。 7. **购物车:** 查看已选购的商品,进行结算和下单。 【管理员功能】 1. **首页:** 查看销售系统整体概况。 2. **个人中心:** 修改密码、管理个人信息。 3. **管理员管理:** 审核和管理注册管理员用户的信息。 4. **基础数据管理:** 管理系统的基础数据,包括公告类型、会员等级类型、新闻类型、商品类型和帮扶申请类型等。 5. **公告管理:** 发布、编辑和删除系统的通知和公告。 6. **新闻信息管理:** 发布、编辑和删除关于东北特产的新闻信息。 7. **商品管理:** 管理特产商品的信息,包括商品基本信息、评价、收藏、订
# 基于C++的BeagleBone BeatBox ## 项目简介 本项目是一个使用C++编写的BeagleBone Green应用程序,能够模拟标准鼓节奏的播放。它利用ALSA API播放鼓声,并通过UDP和WebSocket通信与Web应用进行交互,允许用户通过Web应用控制节奏播放。 ## 项目的主要特性和功能 播放鼓节奏应用支持三种主要的鼓声低音鼓、军鼓和铛。 用户控制通过Web应用控制节奏的速度、音量和鼓声类型。 多线程处理利用多线程处理加速度计输入和节奏播放,实现实时响应。 网络通信应用通过UDP和WebSocket与Web应用通信,允许用户远程控制。 ## 安装使用步骤 1. 安装依赖 安装g++armlinuxgnueabihf编译器sudo aptget install g++armlinuxgnueabihf。 设置CMake编译器路径为usrbinarmlinuxgnueabihfg++。
XIAO SI AI ()
PLCv17水塔水位程序
Python版自动组卷评卷考试系统源码+文档报告(高分大作业),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)Python版自动组卷评卷考试系统源码+文档报告(高分大作业)
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
助产学-助产学+创新成果报告.pdf
基于深度学习的车牌识别源码(Python毕业设计),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Python毕业设计)基于深度学习的车牌识别源码(Py
工商银行2023商业银行业务架构应用的研究与实践白皮书33页.pdf
c# wpfwnmp PHPissues
包括全部基础linux指令,最受初学linux者欢迎!
541驾校管理系统,系统包含三种角色:管理员、学员,教练主要功能如下。 【学员功能】 1. **首页:** 获取驾校最新信息。 2. **驾校车辆:** 查看驾校提供的车辆信息。 3. **考试安排:** 查看个人的考试安排和时间表。 4. **驾驶知识:** 学习和获取驾驶知识。 5. **笔试考试:** 进行驾驶笔试模拟考试。 6. **驾校公告:** 浏览驾校发布的公告信息。 7. **后台管理:** 管理个人预约信息、取消预约、考试预约、取消考试和学员成绩。 【管理员功能】 1. **首页:** 查看整体系统。 2. **个人中心:** 修改密码和管理个人信息。 3. **学员管理:** 管理学员信息,包括注册和审核。 4. **驾校教练管理:** 管理教练信息,包括教练的资质和审核。 5. **驾校车辆管理:** 管理驾校提供的车辆信息。 6. **预约信息管理:** 管理学员的预约信息,包括取消预约和考试预约。 7. **取消预约管理:** 处理学员取消预约的请求。 8. **考试安排管理:** 管理驾校的考试安排。 9. **考试预约管理:** 管理学员的考试预约信息