Java 调用执行其他语言的程序
以 Java 调用 Python 为例
1. 使用 Runtime 类
该方式简单,但是增加了 Java 对python 的依赖,需要事先安装python,及python程序依赖的第三方库
Runtime 使用了单例模式,只能使用 Runtime 的 static 方法获取实例
可以调用 exec() 来执行外部程序,返回 Process 对象实例
public class Runtime extends Object // Runtime 直接继承 Object public static Runtime getRunTime() // 获取 Runtime 实例的 static 方法 public Process exec(...) throws IOException // 执行外部程序,exec()有多个重载方法
例子
Java 程序代码
package java_python;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader;/** 直接使用 Runtime 调用外部程序* 在Java中通过Runtime调用Python程序与直接执行Python程序的效果是一样的,可以在Python中读取传递的参数,也可以在Java中读取到Python的执行结果。* 需要注意的是,不能在Python中通过return语句返回结果,只能将返回值写入到标准输出流中,然后在Java中通过标准输入流读取Python的输出值。*/ public class RunPythonByRuntime {public static void main(String[] args) {String exe = "python"; // 使用python3 依赖biopythonString command = "C:\\Users\\mail.simcere.com\\eclipse-workspace\\python_test\\test\\test01.py"; // python 脚本路径String term = "meningitis"; // 参数String[] cmdArr = new String[] {exe, command, term};Process process;try {process = Runtime.getRuntime().exec(cmdArr); // 执行python程序InputStream inputStream = process.getInputStream(); // 获取python程序的标准输出BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); // 转换为BufferedReader对象实例String line = null;while((line = bufferedReader.readLine()) != null) { // 逐行读入python程序的输出结果 System.out.println(line);}process.waitFor();} catch (Exception e) {e.printStackTrace();}} }
Python 程序代码
#coding=utf-8import sys from Bio import Entrez from Bio import Medline term = sys.argv[1] # 需要外界传入 meningitis retmax = 5 # 控制返回的文献数目 Entrez.email = "771966294@qq.com" handle = Entrez.esearch(db="pubmed", term=term, retmax=retmax) record = Entrez.read(handle) handle = Entrez.efetch(db="pubmed", id=record["IdList"], rettype="medline", retmode="text") records = Medline.parse(handle) records = list(records) handle.close() rst = "" for record in records: # record 是一个字典rst += ">\nPMID:" + record.get("PMID", "?") \+ "\nTitle:" + record.get("TI", "?") \+ "\nAuthors:" + ";".join(record.get("AU", "?")) \+ "\nAbstract:" + record.get("AB", "?") \+ "\nKeywords:" + ";".join(record.get("OT", "?")) \+ "\nMesh Terms:" + ";".join(record.get("MH", "?")) \+ "\nJournal:" + record.get("TA", "?") \+ "\nDate of Publication:" + record.get("DP", "?") \+ "\ndoi:" + record.get("SO", "?") \+ "\n" print(rst)
2. 使用 Jython 需要事先安装 Jython
通过 Jython 可以实现 Java 和 Python 的互相调用,使粒度更加精细,但并没用解决耦合度的问题。
https://www.cnblogs.com/nuccch/p/8435693.html
转载于:https://www.cnblogs.com/0820LL/p/10755240.html
Java 调用执行其他语言的程序相关推荐
- Java调用执行python脚本
Java调用执行python脚本 一.python脚本执行方式 二.Java调用执行python脚本 三.关闭停止进程(端口)命令 四.java调用执行关闭进程杀掉相关进程 一.python脚本执行方 ...
- JAVA 调用微信API 生成小程序跳转地址 亲测有效 【附效果图】
JAVA 调用微信API 生成小程序跳转地址 JAVA 调用微信API 生成小程序跳转地址 由于工作需要,需要在后台生成自己公司的小程序分享地址以供前端工作人员使用,在开发当前功能时因为遇到一些问题导 ...
- java调用wvsc.exe_c语言 函数的调用方法
欢迎加入 编程爱好者 QQ群 群号 57616770 中都只有一个主函数main(), 但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调在第一章中已经介绍过,C源程序是由函数 ...
- java 调用cmd_java打开本地应用程序(调用cmd)---Runtime用法详解
有时候我们需要借助java程序打开电脑自带的一些程序,可以直接打开或者借助cmd命令窗口打开一些常用的应用程序或者脚本,在cmd窗口执行的命令都可以通过这种方式运行. 例如: packagecn.xm ...
- 最详细的java调用含参数的python程序并且返回值
python如今可以部分代替matlab进行各种数学计算,但是在项目中基本都是java去写的,这时就需要在Java程序中调用Python程序.关于在Java中调用Python程序的实现,根据不同的用途 ...
- java调用执行windows命令
序: 先说说这个场景,其实我想的是不用远程连接服务器.通过其他活着的服务搞事情,理论上应该是所有的命令都可以执行的.我这里只是试验性的,可行性,所以我就做了个每次执行一条命令的. 一.先说说使用的执行 ...
- java调用执行ant命令
Runtime调用 public class TestInvokeDosCommand {private static Log log = LogFactory.getLog(TestInvokeDo ...
- 学会java在学易语言_java程序员,0基础学习开发易语言。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 使用模块:精易模块 , 还有一些别的不过可以使用精易进行替代 首先是登陆模块: 需要登陆的是拼多多,查看了拼多多的页面,发现没有任何处理,密码也是明文提交 ...
- java 调用r语言包传参数_Java与R语言的配置,调用
我是最近才接触到了R语言,所以用起来有很多的问题,之前只是想单纯想用java调用到R语言中的一些东西,没有想到这个事情并不是想象的那么简单的.好了,闲话不多说,下面我来说说我在运用R的时候遇上的问题吧 ...
- java 调用win32 api 学习总结
java使用JInvoke调用windows API 使用jinvoke调用windowsAPI.jna使用比较麻烦,需要写c代码和参数转换,jinvoke的使用就像jdk中的包一样. 官网使用参考: ...
最新文章
- 解决pandas:ValueError: Cannot convert non-finite values (NA or inf) to integer
- onmouseover和onmouseout在GridView中应用
- adb 命令小集(转)
- 学生系统优化(三)- -细节优化
- python获取数组中大于某一阈值的那些索引值_使用Python+OpenCV进行实时车道检测...
- [译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测
- 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
- java并发编程实战阅读总结(b)
- 双路服务器cpu必须型号相同,双路主板存在使用不同型号的cpu之说吗?还是必须使用一模一样相同的cpu型号?...
- 苹果关掉200m限制_苹果下载大于200M限制
- python 3解释器_python004 Python3 解释器
- 用Aliyun E-MapReduce集群的sqoop工具和数据库同步数据如何配置网络
- html5表单与Jquery Ajax结合使用
- windows cmd批处理终端 快速编辑模式
- BUUCTF:[INSHack2018]Self Congratulation
- 对一个数组排序之后求相邻数的最大差值
- ios上safari的事件模型(一)
- 全球医药研发支出及处方药市场发展前景分析:预计到2026年全球处方药销售额超过1.4万亿美元[图]
- F-One融资B轮,企业绩效管理与分析服务再升级!
- 解决Visual C++ Redistributable安装找不到vc_runtimeMinimum_x86.msi最简单办法
热门文章
- 随机森林入门攻略(内含R、Python代码)
- CSS如何让图片垂直并水平居中等比缩放?
- 在内容也中寻找母板页中的控件
- 【转】ASPNET程序中常用的三十三种代码
- Portable SharpDevelop(PSD):便携的DotNet集成开发环境
- 最新!全球学术排名出炉:21 所中国大学位居世界 100 强
- 干货 | 集成学习综述与代码实现
- NLP学习—19.检索式对话系统中的rank评估指标、rank技术(Point-wise/Pair-wise/List-wise)以及RankNet、LambdaRank、LambdaMART
- 机器学习基础算法27-聚类实战
- PyTorch中在反向传播前为什么要手动将梯度清零?