Java 调用python说明文档
Java 调用python说明文档
通过java调用python脚本主要如下三种方式:
1、直接执行python脚本;
2、执行python.py文件;
3、使用Runtime.getRuntime()执行脚本文件;
前两种是引入Jython调用pythoninterpreter的类内嵌的编译器,但是如果调用python的某些扩展库,会出错,机器学习的库用此种方式调用,暂未找到解决办法(请教大家),----------也许是因为numpy的缘故吧。
第三种方式也是很简单的一种调用方式。采用java调用控制台进程,即Runtime.getRuntime().exec(),来运行这个python脚本。下面简单介绍此种方式用到的知识。
一、有关process
process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
processBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 process 子类的一个实例,该实例可用来控制进程并获取相关信息。
创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。
二、如何创建Process对象,一般有一下两种方法
1)每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。
2)Runtime.exec() 方法创建一个本机进程,并返回 Process 子类的一个实例。
三、代码演示
Java核心代码:
Process proc=Runtime.getRuntime().exec(args1); //执行py文件 InputStreamReader stdin=new InputStreamReader(proc.getInputStream()); //构造一个默认编码集的InputStreamReader类 LineNumberReader input=new LineNumberReader(stdin);//用来按行读取文本文件
其中args1是String[] { "python",path,url1,url2}; ,path是python文件所在路径,url1是参数1,url2是参数2。
Python代码:

其中sys.argv用于获取参数url1,url2等。
sys.argv[0]:是python脚本名
sys.arg[1]及以后各项:是接收的参数
Java 调用python说明文档的更多相关文章
- Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...
- java调用python程序以及向python程序传递参数
在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...
- java调用python脚本并向python脚本传递参数
1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...
- java调用python的惨痛史(无法获取环境变量)
环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle 事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...
- (转)java调用python脚本
这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...
- [Java/Python] java调用python脚本问题记录
Java调用Python的的两种方式 1.Runtime private static String call_python(String input_argv) { String python_py ...
- Runtime.getRuntime().exec()实现Java调用python程序
使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io ...
- java调用python的几种用法(看这篇就够了)
java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...
- Java调用Python相关问题:指定python环境、传入参数、返回结果
本篇文章涉及到的操作均在Windows系统下进行,Java调用python在原理上不难,但是可能在实际应用中会有各种各样的需求,网上其他的资料很不全,所以又总结了这篇文章,以供参考. 一.指定pyth ...
随机推荐
- Java 测试驱动开发--“井字游戏” 游戏实战
TDD 介绍 TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前,先编写单元测试用 ...
- Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围
1.Java有三种访问权限修饰符,分别为public.protected.private,还有一种为缺省权限修饰符的情况,记为default.其中,可以由public和default来修饰类:这四种修 ...
- mysql之其他
一 IDE工具介绍 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: 1. 测试+链接数据库 2. 新建库 3. 新建表,新增字段+类型+约束 4. 设计表:外键 5 ...
- 使用Python实现贪心算法
题目: 圣诞节来临了,在城市A中,圣诞老人准备分发糖果.现在有多箱不同的糖果,每一种糖果都有自己的价值和重量.每箱糖果都可以拆分成任意散装组合带走.圣诞老人的驯鹿最多只能承受一定重量的糖果.请问圣诞老 ...
- [转载]binlog归档
1.1. 前言 对数据库数据进行备份都是日常的工作(虽然都是自动做的),备份中有一项必备的那就是binglog了.在工作中一般这些备份都会保留一段时间后归档.时间长了归档的数据将会非常大.这时候我们就 ...
- 【读书笔记】【深入理解ES6】#12-代理(Proxy)和反射(Reflection)API
代理(Proxy)是一种可以拦截并改变底层JavaScript引擎操作的包装器,在新语言中通过它暴露内部运作的对象,从而让开发者可以创建内建的对象. 数组问题 在ECMAScript6出现之前,开发者 ...
- 浅谈我的MongoDB学习(二)
上一篇简单讲了mongodb的安装,mongo的windows服务安装,这样服务器重启windows服务会自动重启mongodb的server,然后我们就可以用客户端去管理数据了.mongodb客户端 ...
- Windows10 环境下安装 ElasticSearch
环境与版本 操作系统:windows 10 Elasticsearch 版本:6.1.1 Java 版本:9.0.1 ik 分词器版本:6.1.1 安装步骤 前置要求 操作系统中需要安装有 java ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)
前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...
- 【转】Memory gates checking failed because the free memory***解决办法
Issue: Vault users cannot connect. VLOGS show the following error: Memory gates checking failed beca ...