以 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 调用执行其他语言的程序相关推荐

  1. Java调用执行python脚本

    Java调用执行python脚本 一.python脚本执行方式 二.Java调用执行python脚本 三.关闭停止进程(端口)命令 四.java调用执行关闭进程杀掉相关进程 一.python脚本执行方 ...

  2. JAVA 调用微信API 生成小程序跳转地址 亲测有效 【附效果图】

    JAVA 调用微信API 生成小程序跳转地址 JAVA 调用微信API 生成小程序跳转地址 由于工作需要,需要在后台生成自己公司的小程序分享地址以供前端工作人员使用,在开发当前功能时因为遇到一些问题导 ...

  3. java调用wvsc.exe_c语言 函数的调用方法

    欢迎加入 编程爱好者 QQ群 群号 57616770 中都只有一个主函数main(), 但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调在第一章中已经介绍过,C源程序是由函数 ...

  4. java 调用cmd_java打开本地应用程序(调用cmd)---Runtime用法详解

    有时候我们需要借助java程序打开电脑自带的一些程序,可以直接打开或者借助cmd命令窗口打开一些常用的应用程序或者脚本,在cmd窗口执行的命令都可以通过这种方式运行. 例如: packagecn.xm ...

  5. 最详细的java调用含参数的python程序并且返回值

    python如今可以部分代替matlab进行各种数学计算,但是在项目中基本都是java去写的,这时就需要在Java程序中调用Python程序.关于在Java中调用Python程序的实现,根据不同的用途 ...

  6. java调用执行windows命令

    序: 先说说这个场景,其实我想的是不用远程连接服务器.通过其他活着的服务搞事情,理论上应该是所有的命令都可以执行的.我这里只是试验性的,可行性,所以我就做了个每次执行一条命令的. 一.先说说使用的执行 ...

  7. java调用执行ant命令

    Runtime调用 public class TestInvokeDosCommand {private static Log log = LogFactory.getLog(TestInvokeDo ...

  8. 学会java在学易语言_java程序员,0基础学习开发易语言。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 使用模块:精易模块 , 还有一些别的不过可以使用精易进行替代 首先是登陆模块: 需要登陆的是拼多多,查看了拼多多的页面,发现没有任何处理,密码也是明文提交 ...

  9. java 调用r语言包传参数_Java与R语言的配置,调用

    我是最近才接触到了R语言,所以用起来有很多的问题,之前只是想单纯想用java调用到R语言中的一些东西,没有想到这个事情并不是想象的那么简单的.好了,闲话不多说,下面我来说说我在运用R的时候遇上的问题吧 ...

  10. java 调用win32 api 学习总结

    java使用JInvoke调用windows API 使用jinvoke调用windowsAPI.jna使用比较麻烦,需要写c代码和参数转换,jinvoke的使用就像jdk中的包一样. 官网使用参考: ...

最新文章

  1. 解决pandas:ValueError: Cannot convert non-finite values (NA or inf) to integer
  2. onmouseover和onmouseout在GridView中应用
  3. adb 命令小集(转)
  4. 学生系统优化(三)- -细节优化
  5. python获取数组中大于某一阈值的那些索引值_使用Python+OpenCV进行实时车道检测...
  6. [译] APT分析报告:04.Kraken - 新型无文件APT攻击利用Windows错误报告服务逃避检测
  7. 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0
  8. java并发编程实战阅读总结(b)
  9. 双路服务器cpu必须型号相同,双路主板存在使用不同型号的cpu之说吗?还是必须使用一模一样相同的cpu型号?...
  10. 苹果关掉200m限制_苹果下载大于200M限制
  11. python 3解释器_python004 Python3 解释器
  12. 用Aliyun E-MapReduce集群的sqoop工具和数据库同步数据如何配置网络
  13. html5表单与Jquery Ajax结合使用
  14. windows cmd批处理终端 快速编辑模式
  15. BUUCTF:[INSHack2018]Self Congratulation
  16. 对一个数组排序之后求相邻数的最大差值
  17. ios上safari的事件模型(一)
  18. 全球医药研发支出及处方药市场发展前景分析:预计到2026年全球处方药销售额超过1.4万亿美元[图]
  19. F-One融资B轮,企业绩效管理与分析服务再升级!
  20. 解决Visual C++ Redistributable安装找不到vc_runtimeMinimum_x86.msi最简单办法

热门文章

  1. 随机森林入门攻略(内含R、Python代码)
  2. CSS如何让图片垂直并水平居中等比缩放?
  3. 在内容也中寻找母板页中的控件
  4. 【转】ASPNET程序中常用的三十三种代码
  5. Portable SharpDevelop(PSD):便携的DotNet集成开发环境
  6. 最新!全球学术排名出炉:21 所中国大学位居世界 100 强
  7. 干货 | 集成学习综述与代码实现
  8. NLP学习—19.检索式对话系统中的rank评估指标、rank技术(Point-wise/Pair-wise/List-wise)以及RankNet、LambdaRank、LambdaMART
  9. 机器学习基础算法27-聚类实战
  10. PyTorch中在反向传播前为什么要手动将梯度清零?