Java调用Linux下的shell命令并将结果以流的形式返回

 

 

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

public class Main
{
public static void main(String[] args)
{

//得到Java进程的相关Runtime运行对象
Runtime runtime = Runtime.getRuntime();

try
{
//利用exec()方法执行shell 命令 ls -al /root ,并且返回一个Process对象 也就是子进程
//ps:这里都以最简单的shell命令举例。
Process process = runtime.exec("ls -al /root");

BufferedReader bufferReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));

StringBuffer stringBuffer = new StringBuffer();

String temp = null;

while ((temp = bufferReader.readLine()) != null)
{
stringBuffer.append(temp);

stringBuffer.append("\n");
}

System.out.println(stringBuffer);

}
catch (IOException e)
{
e.printStackTrace();
}
}
}

 

 

 

 

 

 

 

 

public class ShellExcuter {

 

private static Logger logger = Logger.getLogger(ShellExcuter.class);

 

/**

* 跑linux命令

* @param cmd

* @param args

*/

public static void runShell(String cmd, String[] args) {

InputStream in;

BufferedReader br;

OutputStream out;

BufferedWriter bw;

try {

for (String arg : args) {

cmd = cmd +" "+arg;

}

// String[] cmds = new String[] {

// "/bin/sh",

// "-c",

// cmd };

logger.info(cmd);

Process process = Runtime.getRuntime().exec(cmd);

 

BufferedReader bufferReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String temp = null;

while ((temp = bufferReader.readLine()) != null) {

logger.info(temp);

}

 

BufferedReader bufferReader2 = new BufferedReader(new InputStreamReader(process.getErrorStream()));

while ((temp = bufferReader.readLine()) != null) {

logger.info(temp);

}

 

bufferReader.close();

bufferReader2.close();

 

process.waitFor();

process.destroy();

} catch (Throwable e) {

logger.error("执行linux命令出错:" + e.getMessage());

e.printStackTrace();

}

}

 

}

posted @   会飞的斧头  阅读(1914)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示