一个偶然的场景,笔者需要在java代码中执行某个python脚本,并且需要向脚本中传递参数,有可能的话,还要获取该脚本的某些执行结果,回到主程序中继续执行下去。

  没有思路之前,狭隘的想法是,java中怎么能执行python脚本呢,两种不同的语言,java依赖jar包,python需要引入各种库。想到这里,灵机一动,前辈们的智慧如此博大精深,肯定有可以集成的的jar包,于是乎,发现了jython.jar。jython是用java语言编写的python实现,可以运行在任何支持JVM的环境中,可以无缝集成到java平台上。哇~如此强大,我十分欣喜,jython在上,受小弟一拜。于是乎,开始了各种神科普(这里有一个比较基础的可以参考看看https://www.cnblogs.com/sesamfox/articles/2313040.html),一个小时以后我冷静了下来,还是需要花点时间来研究下的,此方案作为备用,值得研究下,毕竟也是很强大的。

  鉴于时间的催促,还有没有其它更快捷简便的方法呢?后来了解到了java的Runtime,Runtime 类代表着Java程序的运行时环境,每个Java程序都有一个Runtime实例,该类会被自动创建,我们可以通过Runtime.getRuntime() 方法来获取当前程序的Runtime实例,通过这个可以获取到jvm的信息,关键是还可以执行系统命令。好的,我又开心了,因为这意味着我的脚本可以执行了。显然这个方案能让我更简单更快的实现我想要的,话不多说,上代码

Runtime.getRuntime().exec(args)中传的参数,除了可以传数组以外,还可以传字符串,字符串中以空格隔开参数,例如 exec("python 脚本路径 参数1 参数2")。python脚本中,使用sys.argv可以接收到从java程序中传入的参数,这样,就顺利打通了。如果需要从脚本中回传一些结果到主程序的话,只需要在脚本中将需要的结果打印到控制台,然后主程序用流去读取就可以了。

  好的,到这里我的问题就完美解决了。不过还有很多更广阔的知识需要去了解,去实践,语言是强大的,我们是渺小的,要不断的探索才能更好的为我们所用。

探索如何在java中执行python脚本的更多相关文章

  1. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  2. 使用Runtime.getRuntime().exec()在java中调用python脚本

    举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用ja ...

  3. shell脚本中执行python脚本并接收其返回值的例子

    1.在shell脚本执行python脚本时,需要通过python脚本的返回值来判断后面程序要执行的命令 例:有两个py程序  hello.py 复制代码代码如下: def main():    pri ...

  4. java中执行JS脚本

    package 测试包; import javax.script.*; public class SSSSSSSSS { public SSSSSSSSS() { // TODO Auto-gener ...

  5. python爬虫简单实现,并在java中调用python脚本,将数据保存在json文件中

    # coding:utf-8 import urllib2 from bs4 import BeautifulSoup import json import sys reload(sys) sys.s ...

  6. 如何在Apache中运行Python脚本

    第一步:进入C:\Apache24\cgi-bin: 第二步:在cgi-bin目录下新建一个hello.py文件: 第三步: #!python #coding:utf-8 print("co ...

  7. 如何在cmd中执行python文件

    打开cmd终端 输入python     然后再输入要执行文件的路径 就可以把python文件运行起来                                                  ...

  8. 在Java中调用Python代码

    极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...

  9. 在Java中调用Python

    写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...

  10. 在java中调用python方法

    1.http://sourceforge.net/projects/jython/下载jython包,把其中的jython.jar添加到工程目录 示例: 1.摘自:http://blog.csdn.n ...

随机推荐

  1. 为什么要虚拟化,为什么要容器,为什么要Docker,为什么要K8S?

    前言 如标题中的问题所提到的虚拟化,容器,Docker和K8s那样,我们不妨这样问:这些技术到底适用于哪些场景,有没有别的技术可以替代?这些技术的优劣在哪里? 下面我将针对性地从以上几个问题的出发点, ...

  2. 01-逻辑仿真工具VCS使用

    1 逻辑仿真工具VCS的使用 在书写完成RTL代码之后,确保自己书写的代码和自己想要的逻辑是一致的. VCS是synopsys公司下的的仿真工具. 1 VCS仿真过程 编译-->仿真--> ...

  3. odoo中的字段创建后,不可以编辑

  4. Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,异常处理

    Django框架之drf 一.断点调式使用 ​ 指,在我们编写代码的时候,程序运行出现报错是无可避免的,当程序 出现报错时,我们需要找到出现报错的代码进行修改,如果时简短的代码很容易就可以找到报错位置 ...

  5. redis06-事务

    1 基本说明 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞. 2 事务相关的几个命令 2.1 MULTI 标记一个事务块 ...

  6. 计算机网络基础05-Web应用

    1 Web最重要的构成基础 网页 网页互相连接 1.1 网页 网页包含多个对象 对象:HTML文件.图片文件.视频文件.动态脚本等 基本HTML文件:包含对其它对象引用的连接 1.2 对象的寻址 UR ...

  7. Fiddler V5.0 英文/汉化 Windows 抓包工具 【12月29日亲测有效】

    前言 Fiddlerr 功能强大的抓包工具,Web调试工具,HTTP协议抓包调试工具.它能够捕获浏览器和程序的所有http/https通信连接,可以针对访问请求,分析请求数据报文.设置断点.调试web ...

  8. SpringCloud Stream消息驱动

    简单搭建,没有技术含量,Demo可用 1.介绍 ①产生原因 RabbitMQ.RocketMQ.Kafka.ActiveMQ 在一个项目中,可能存在多种不同的MQ,在不同的MQ中,切换维护开发都很麻烦 ...

  9. IOS + H5 开发,如何实现,H5页面显示在IOS上

    环境:IOS12.0 工具:Xcode 12.0 工程:IOS12.0工程 + H512.0工程 1,先把开发的H5画面,编译打包:assets静态资源文件 favicon.ico图标 index.h ...

  10. Windows家庭版安装本地组策略编辑器【gpedit.msc】

    由于我们买的电脑一般默认安装的Windows家庭版本 家庭版本默认不带有本地组策略编辑器 当我们运行gpedit.msc的时候会提示 Winodws找不到文件'gpedit.msc'.请确定文件名是否 ...