首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Java程序中调用shell脚本?

从Java程序中调用shell脚本,可以使用Java的Runtime类或者ProcessBuilder类。以下是两种方法的示例代码:

方法一:使用Runtime

代码语言:java
复制
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class JavaShell {
    public static void main(String[] args) {
        try {
            String shellCommand = "sh /path/to/your/script.sh";
            Process process = Runtime.getRuntime().exec(shellCommand);

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            process.waitFor();
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方法二:使用ProcessBuilder

代码语言:java
复制
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class JavaShell {
    public static void main(String[] args) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder("sh", "/path/to/your/script.sh");
            Process process = processBuilder.start();

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            process.waitFor();
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这两种方法都可以实现从Java程序中调用shell脚本。其中,Runtime.getRuntime().exec()方法是Java中最简单的方法,但是它存在一些安全隐患,因此在实际开发中,推荐使用ProcessBuilder类。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Shell脚本调用Python程序

脚本背景:主管要求看门狗程序不仅仅只是看门,还要在看门成功的时候发送邮件给各个开发人员,而且必须要用公司原有的python程序作为发送邮件的主程序,所以需要在原有的看门狗程序上加一句话,而这个看门狗程序恰恰是...shell程序,两种不同程序混搭交织,还有变量的混搭交织,很是让人爱恨交织。...现在的重点就是要在看门狗这个shell脚本里添加一句命令,这个命令要启动AutoMail.py这个脚本,同时还要传导出看门狗负责的模块名,这里又涉及到了在python的启动命令里添加shell变量的“难点...这里应该有人好奇了,明明是启动python程序,却在命令里添加了一个shell的变量,为什么python还是可以识别呢?...因为虽然命令是启动python程序,但是命令本身是shell的语句啊,所以shell的语句当然可以识别shell的变量了~~~

1.5K10

Java运行shell脚本

需求 忽然想写个东西,然后发现自己的linux端口开放问题以及端口占用问题很麻烦,因为我经常用8080端口,如果有一个图形化界面看某个端口被占用以及被什么占用就好了。...落地实现 (1)直接执行shell命令(参数为命令) ShellUtils.exceShell("ls -l /"); package com.example.portinterpretationplugin.utils...; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import...; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import...(在jar包里) (1)复制sh到操作系统的某个目录下(亲测,可用) jar包内复制文件到系统目录内_CBeann的博客-CSDN博客_java将jar包中文件复制到 (2)用方式二执行脚本

15510

Python脚本调用Java程序时Classpath错误

他在脚本中使用以下代码调用Java程序:x = 'java -cp "lib/*:esalib.jar" clldsystem.esa.ESAAnalyzer %s %s' % (word1, word2...解决方案为了解决此错误,用户可以执行以下步骤:确保Java类路径正确。用户需要确保Java类路径包含Java程序所在的JAR文件和库文件。...JVM是运行Java程序所需的软件环境。如果尚未安装JVM,可以Java官方网站下载并安装。确保Python脚本的编码正确。用户需要确保Python脚本的编码正确。...此脚本将使用Java类路径的JAR文件和库文件运行Java程序"clldsystem.esa.ESAAnalyzer"。Java程序的主类是"clldsystem.esa.ESAAnalyzer"。...脚本使用"subprocess"模块调用Java程序,并等待Java程序执行完成。

8210

【Groovy】Groovy 脚本调用 ( Java调用 Groovy 脚本 )

文章目录 前言 一、Groovy 类调用 Groovy 脚本 1、参考 Script#evaluate 方法分析 Groovy 类调用 Groovy 脚本 2、创建 Binding 对象并设置 args...参数 3、创建 GroovyShell 对象并执行 Groovy 脚本 4、代码示例 二、完整代码示例 1、调用者 Groovy 脚本的类 2、被调用者 Groovy 脚本 3、执行结果 前言 Java...类调用 Groovy 脚本 , 与 Groovy 类调用 Groovy 脚本 , 代码基本类似 ; 也是参考 groovy.lang.Script#evaluate 方法 , 创建 Binding...对象并设置 args 参数 , 创建 GroovyShell 对象并执行 Groovy 脚本 , 就可以在 Java启动 Groovy 脚本 ; 一、Groovy 类调用 Groovy 脚本...在 Binding 对象的 Map variables 成员 , 设置 args 参数 , 作为调用 Groovy 脚本的执行参数 ; 首先 , 要在 Java 类方法 , 创建 Binding

1.7K30

JAVA001-java  调用bash shell脚本阻塞问题的解决

背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结果给web 界面显示。 现象: Java 进程阻塞。...使用ps命令可以看到被调用shell 的执行进程状态为S !...Java程序调用Runtime.getRuntime().exec(jyName)之后,linux 会创建一个进程用于执行这个程序,该进程与jvm之间使用三个管道进行链接 标准输入、标准输出、标准出错...我们的java 程序也就阻塞在了 process.waitFor(); 解决办法 所调用程序不要有太多的输出到标准出错 、标准输出。...Jvm及我们的java程序,对该子进程的标准输出、标准出错进行读取,从而避免缓存区满。

1.3K20

linux c程序获取shell脚本输出

前言   Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。...比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序通过 system函数来调用shell命令。...方法就是fork一个子进程,并创建一个匿名管道,在子进程执行shell命令,并将其标准输出dup 到匿名管道的输入端,父进程管道读取,即可获得shell命令的输出,代码如下:   /**   *...Linux提供了很多的实用工具和脚本,在程序调用工具和脚本,无疑可以简化程序,从而降低代码的缺陷数目。...Linux shell脚本也是一个强大的工具,我们可以根据需要编制脚本,然后在程序调用自定义脚本

5.6K20

Shell 脚本调用另一个 Shell 脚本的三种方式

Shell 从父 Shell 继承环境变量,但是子 Shell 的环境变量不会带回父 Shell。 exec exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用脚本....被调用脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本 exec 行之后的内容就不会再执行了。...这是 exec 和 source 的区别. source 与 fork 的区别是不新开一个子 Shell 来执行被调用脚本,而是在同一个 Shell 执行....exec 在同一个 Shell 内执行,但是父脚本 exec 行之后的内容就不会再执行了 source 在同一个 Shell 执行,在被调用脚本声明的变量和环境变量, 都可以在主脚本中进行获取和使用...参考: 在shell脚本调用另一个脚本的三种不同方法(fork, exec, source)

4.3K20

如何用Python调用java程序

如何用Python调用java程序 前言 不会java怎么做Java程序的单元测试呢?我想有一种很好的选择就是Python,充分利用Python的胶水语言的特性,你可以做任何语言的单元测试。...JPype简述 JPype是一个能够让Python代码方便地调用Java代码的库,所以你只需掌握JPype库即可做Java程序的单元测试了。...调用自定义代码 下面我们演示如何使用Python JPype来调用我们自己写的Java程序: public class JPypeDemo{ public String say(String user...代码保持至JPypeDemo.java,使用下列命令,将上述代码编译成jar文件 编译java程序 javac JPypeDemo.java 打包成jar文件 jar cvf JPypeDemo.jar...() 将上述python代码保存至python_call_java.py,并和JPypeDemo.jar(实际操作你可以将jar放在任意目录,只要在启动jvm时指定待调用jar的路径即可) 整个执行过程和结果如下图

10.3K61
领券