首页 > 后端开发 > 正文

如何在java程序中调用linux命令或者shell脚本

2024-03-16 18:32:40 | 我爱编程网

我爱编程网小编给大家带来了如何在java程序中调用linux命令或者shell脚本相关文章,一起来看一下吧。

本文目录一览:

如何在java程序中调用linux命令或者shell脚本

如何在java程序中调用linux命令或者shell脚本

这里不得不提到java的process类了。

process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。

process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。

至于详细的process类的介绍放在以后介绍。

另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。

这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)

下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。

下面说一下,如何使用process来调用shell脚本

例如,我需要在linux下实行linux命令:sh test.sh,下面就是执行test.sh命令的方法:

这个var参数就是日期这个201102包的名字。

String shpath="/test/test.sh"; //程序路径

Process process =null;

String command1 = “chmod 777 ” + shpath;

process = Runtime.getRuntime().exec(command1);

process.waitFor();

String var="201102"; //参数

String command2 = “/bin/sh ” + shpath + ” ” + var;

Runtime.getRuntime().exec(command2).waitFor();

注意:

1

我为什么要使用 chmod 777命令呢?在有的机器上面,可能没有设置权限问题。这是你在linux下面执行shell脚本需要注意的问题。没有的话,就需要添加权限,就用chmod 777,否则在执行到Runtime.getRuntime().exec的时侯会出现Permission denied错误。

2

waitFor()这个也是必不可缺的,如果你需要执行多行命令的话,把waitFor()这个加上。

如何在java程序中调用linux命令或者shell脚本

如何在java程序中调用linux命令或者shell脚本

java程序是提供了这个一方法, Process pro = Runtime.getRuntime().exec(cmds);

但是一般来说,尽量去用一些其他脚本(lua,shell,python)去执行一系列linux命令比较灵活, 而且耗费资源少。但是Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分可观。

java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程。频繁的创建对CPU和内存的消耗很大。

下面是一个调用linux命令的例子:

public class Test {

public static void main(String[] args) throws Exception{

String[] cmds = {"/bin/sh","-c","ps -ef|grep java"};

Process pro = Runtime.getRuntime().exec(cmds);

pro.waitFor();  //阻塞,直到上述命令执行完

InputStream in = pro.getInputStream();

BufferedReader read = new BufferedReader(new InputStreamReader(in));

String line = null;

while((line = read.readLine())!=null){

System.out.println(line);

}

}

}

注:参数中逗/bin/sh逗 逗-c逗 是可以用shell执行指定的命令的意思

这里/bin/sh -c ps -ef|grep java,会执行ps linux命令

如何在java程序中调用linux命令或者shell脚本

怎么用java代码运行linux命令

以下方法支持Linux和windows两个系统的

命令行

调用。还用到了apache的lang工具包commons-lang3-3.1.jar来判断操作系统类型、也用到了和log4j-1.2.16.jar来打印日志。至于rm -rf 是否能成功删除文件,可以手动去调用命令行试试。

private String callCmd(String cmd) throws InterruptedException, UnHandledOSException, ExecuteException {

if(SystemUtils.IS_OS_LINUX){

try {

// 使用Runtime来执行command,生成Process对象

Process process = Runtime.getRuntime().exec(

new String[] { "/bin/sh", "-c", cmd });

int exitCode = process.waitFor();

// 取得命令结果的输出流

InputStream is = process.getInputStream();

// 用一个读输出流类去读

InputStreamReader isr = new InputStreamReader(is);

// 用缓冲器读行

BufferedReader br = new BufferedReader(isr);

String line = null;

StringBuilder sb = new StringBuilder();

while ((line = br.readLine()) != null) {

System.out.println(line);

sb.append(line);

}

is.close();

isr.close();

br.close();

return sb.toString();

} catch (java.lang.NullPointerException e) {

System.err.println("NullPointerException " + e.getMessage());我爱编程网

logger.error(cmd);

} catch (java.io.IOException e) {

System.err.println("IOException " + e.getMessage());

}

throw new ExecuteException(cmd + "执行出错!");

}

if(SystemUtils.IS_OS_WINDOWS){

Process process;

try {

//process = new ProcessBuilder(cmd).start();

String[] param_array = cmd.split("[\\s]+");

ProcessBuilder pb = new ProcessBuilder(param_array);

process = pb.start();

/*process=Runtime.getRuntime().exec(cmd);*/

int exitCode = process.waitFor();

InputStream is = process.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String line;

StringBuilder sb = new StringBuilder();

while ((line = br.readLine()) != null) {

System.out.println(line);

sb.append(line);

}

is.close();

isr.close();

br.close();

return sb.toString();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

throw new ExecuteException(cmd + "执行出错!");

}

throw new UnHandledOSException("不支持本操作系统");

}

以上就是我爱编程网小编给大家带来的如何在java程序中调用linux命令或者shell脚本,希望能对大家有所帮助。
与“如何在java程序中调用linux命令或者shell脚本”相关推荐
bat脚本如何调用JAVA程序
bat脚本如何调用JAVA程序

.bat调用java文件的命令第一步:先右击创建一个txt文件,重命名为”run.bat“文件。第二步:将此文件复制到java文件的存放路径下。第三步:右击,选择编辑,之后在里面输入:javac文件名称.java//第一行是为了编译java文件为class文件java文件名称//本句话是为了执行class文件进行运行备注:bat文件默认的就是执行黑窗口命令,直接双击运行即

2024-03-16 13:21:26
java程序如何在linux服务器上运行
java程序如何在linux服务器上运行

怎样使用linux运行java程序?使用linux运行java程序具体步骤如下:1.Windows上使用eclipse编译java工程,编译完成后导出为RunnableJARFile。例如,此处将test工程中的Test2文件export为MyTest2.jar文件。2.Ubuntu上java环境安装。①jdk官网-downloads-2133151.html下载L

2024-03-15 03:02:46
如何使用命令行编译以及运行java文件
如何使用命令行编译以及运行java文件

如何使用命令行编译以及运行java文件方法/步骤我们先新建文本文档,输入自己的java程序。这里我写一个简单的java程序,来做示范。importjava.util.*;publicclassHelloDate{publicstaticvoidmain(String[]args){System.out.println("Hello,it's:");System.

2024-03-15 03:57:49
pysimplegui中如何创建python脚本
pysimplegui中如何创建python脚本

pysimplegui中如何创建python脚本要在Python中使用PySimpleGUI创建图形用户界面(GUI)应用程序,您需要遵循以下步骤:1.**安装PySimpleGUI**:首先,确保您已经安装了PySimpleGUI库。您可以使用pip来安装它,运行以下命令:```pythonpipinstallPySimpleGUI```2.**导入PySimpl

2024-01-15 20:02:34
如何在ubuntu终端运行python脚本
如何在ubuntu终端运行python脚本

ubuntu下用python写了个生成动态壁纸的脚本,如果通过代码实现使用这个xml,而不是通过桌面->背景->添加sudomkdir/usr/share/backgrounds/mybackground-imgssudocd/usr/share/backgrounds/mybackground-imgssudocp/home/你的背景图片所在目录/*.sudo./backgro

2024-01-06 04:45:15
如何在python IDLE Shell窗口中编写程序计算圆的周长?
如何在python IDLE Shell窗口中编写程序计算圆的周长?

如何在pythonIDLEShell窗口中编写程序计算圆的周长?可以按照以下步骤在PythonIDLEShell窗口中编写计算圆周长的程序:打开PythonIDLEShell窗口。在窗口中输入以下代码:pythonCopycoderadius=float(input("请输入圆的半径:"))circumference=2*3.14159*radiuspr

2023-12-13 02:25:56
python中用语获取用户输入的命令是input python中用于获取用户输入的命令
python中用语获取用户输入的命令是input python中用于获取用户输入的命令

python中用语获取用户输入的命令是input在Python中,`input()`函数用于获取用户输入的命令。`input()`函数接受一个字符串参数,该参数是用户在终端或命令行界面中输入的内容。`input()`函数返回用户输入的字符串,并将其作为Python变量返回。下面是一个简单的示例,演示如何使用`input()`函数获取用户输入:```pythonname=

2024-02-29 18:01:25
如何运行java applat小程序
如何运行java applat小程序

如何运行javaapplat小程序如果你是想学习java的话,建议下载一个eclipse,java程序和applet直接能在上面运行,上面也有很多java类使用的提示。。。。如果只是想运行一下的话,步骤就比较多了,你先对环境变量进行配置这个百度上有,根据电脑系统的不同,配置方法也不一样;配好之后要进行测试,在cmd命令符输入javac回车出现帮助提示就表

2024-03-15 07:28:39