jython笔记
这篇笔记主要记录了我使用jython的一些问题点:
首先,jython是一个Java写的用来解析python语言的工具,他可以做到运行环境中没有python也可以使用python。
jython采用的方式是优先使用本机的python2,如果没有检测到本机的python2,则会去寻找jython.rar或者本机安装好的jython运行环境。
下面是我写的一些jython的代码:
PySource,因为jython启动之后需要关闭,而且启动一个实例的时间挺长的,所以最好是做成静态类:
package com.shinho.bi.db;
import org.python.util.PythonInterpreter;
public class PySource {
public static PythonInterpreter inter;
public static void init(){
inter = new PythonInterpreter();
}
}
jython使用方法,里面有入参和出参的传递:
/**
* 特殊数据处理方法
* @param key 模板关键字
* @param list 查询出来的结果集
* @throws TemplateException
* @throws IOException
*/
public static String MathMethod(String key, String json){
Cache<String, Object> myCache = EhcacheUtil.cacheManager.getCache("myCache", String.class, Object.class);
Map<String, String> tpls = (Map<String, String>)myCache.get("sqls");
String res = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String sqlModel = tpls.get(key);
StringWriter out = null;
try {
PySource.inter.set("ds", json);
out = new StringWriter();
PySource.inter.setOut(out);
logger.info("begin time:"+sdf.format(new Date()));
PySource.inter.exec(sqlModel);
//调试的时候取本地代码
//PySource.inter.execfile("/home/wp/Code/SQLModel/python/daily.py");
//调试的时候取本地代码
logger.info("end time:"+sdf.format(new Date()));
res = out.toString();
logger.info(res);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
} return res;
}
python模板
#coding:utf-8 import sys
import json
import time
import calendar if __name__ == '__main__':
model = json.loads(ds)
rdc1 = model[0]
goal = model[1][0]
ly = model[1][1]
ny = time.strftime("%Y", time.localtime())
nm = time.strftime("%m", time.localtime())
nd = time.strftime("%d", time.localtime())
nym = time.strftime("%Y%m", time.localtime())
monthRange = calendar.monthrange(int(ny),int(nm))[1]
dayNow = int(nd)
avg_goal = float(goal['mapList'][0]['value'])/monthRange
avg_ly = float(ly['mapList'][0]['value'])/monthRange
rdcList = []
goalList = []
lyList = []
vsGoal = []
vsLy = []
vsGoalLv = []
vsLyLv = []
i = 1
nowBgt = 0
nowLy = 0
while (i <= monthRange):
dd = str(i)
if i < 10:
dd = ''+str(i)
nowBgt = nowBgt + avg_goal
nowLy = nowLy + avg_ly
goalMap = {'key': nym + dd, 'value': nowBgt}
lyMap = {'key': nym + dd, 'value': nowLy}
goalList.append(goalMap)
lyList.append(lyMap)
i = i+1
goalCard = {'index': 'MRL2', 'mapList': goalList}
lyCard = {'index': 'MRL3', 'mapList': lyList}
nowVal = 0
i = 1
while (i <= dayNow):
dd = str(i)
if i < 10:
dd = ''+str(i)
if i-1 < len(rdc1[0]["mapList"]):
key = rdc1[0]["mapList"][i-1]["key"]
value = 0
if key == nym + dd:
value = float(rdc1[0]["mapList"][i-1]["value"])
else:
value = 0
else:
value = 0
nowVal = nowVal + value
rdcMap = {'key': nym + dd, 'value': nowVal}
rdcList.append(rdcMap)
dayGoal = 0
dayLy = 0
for gMap in goalList:
if gMap["key"] == (nym + dd) :
dayGoal = float(gMap["value"])
break
for lMap in lyList:
if lMap["key"] == (nym + dd):
dayLy = float(lMap["value"])
break
# 计算vs
vsGoalMap = {'key': nym + dd, 'value': (nowVal-dayGoal)}
vsLyMap = {'key': nym + dd, 'value': (nowVal-dayLy)}
vsGoal.append(vsGoalMap)
vsLy.append(vsLyMap)
vsGoalLvMap = {'key': nym + dd, 'value': (nowVal/dayGoal)-1}
vsLyLvMap = {'key': nym + dd, 'value': (nowVal/dayLy)-1}
vsGoalLv.append(vsGoalLvMap)
vsLyLv.append(vsLyLvMap)
i = i+1;
rdcCard = {'index': 'MRL1', 'mapList': rdcList}
vsGoalCard = {'index': 'MRL4', 'mapList': vsGoal}
vsLyCard = {'index': 'MRL5', 'mapList': vsLy}
vsGoalLvCard = {'index': 'MRL6', 'mapList': vsGoalLv}
vsLyLvCard = {'index': 'MRL7', 'mapList': vsLyLv}
resList = [rdcCard, goalCard, lyCard, vsGoalCard, vsLyCard, vsGoalLvCard, vsLyLvCard]
print resList
最后,是如何控制jython使用本机python的,指定python路径:
其中只有第一个put有用哦
Properties props = new Properties();
props.put("python.path", "/usr/bin/python");
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "false"); Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
jython笔记的更多相关文章
- jython学习笔记3
1.os.environ["HOME"] 为什么这句话在我的STS中打印不出东西,还报错 Method Description close() Close file fileno( ...
- jython语言学习笔记
1.变量可以随便定义,不限制类型,不限制数值.开头空4个空格,使用def定义函数,可以嵌套,可以传参. 2.每个语句结束的时候没有分号.定义类的时候没有括号.在print语句的后面有格式转换时要加上% ...
- 用Java执行Python:Jython踩坑笔记
常见的java调用python脚本方式 1.通过Jython.jar提供的类库实现 2.通过Runtime.getRuntime()开启进程来执行脚本文件 1.Jython Jpython使用时,版本 ...
- jython学习笔记2
1.%是求余,//是整除的商,**是乘方 abs(var) Absolute value pow(x, y) Can be used in place of ** operator pow(x,y,m ...
- Python学习笔记—Python基础1 介绍、发展史、安装、基本语法
第一周学习笔记: 一.Python介绍 1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...
- Python学习笔记(一)基础
学习资料 跟着廖雪峰的Python教程学习Python,大家可以去官方网站查看学习教程.使用的Python版本为3.0.x,解释器为CPython.本系列博客为学习笔记,记录跟随廖老师所学知识,同时会 ...
- 《深入理解Java虚拟机》学习笔记之类加载
之前在学习ASM时做了一篇笔记<Java字节码操纵框架ASM小试>,笔记里对类文件结构做了简介,这里我们来回顾一下. Class类文件结构 在Java发展之初设计者们发布规范文档时就刻意把 ...
- Python学习笔记【第一篇】:认识python和基础知识
我的笔记里的python代码运行环境都是在pycharm软件中运行,所以不去记录如何配置环境变量呀什么的. python种类 Cpython: Python的官方版本,使用C语言实现,使用最为广泛,C ...
- 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势
0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...
随机推荐
- 初学html的单词笔记
font-size: 文字大小color: 顏色solid: 边框线text-align: 間距center: 文字放在中間<head> 网页头部<title> 网页标题< ...
- CodeForces - 441D: Valera and Swaps(置换群)
A permutation p of length n is a sequence of distinct integers p1, p2, ..., pn (1 ≤ pi ≤ n). A permu ...
- python---map 用法 [转载]
map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 1.当seq只 ...
- Blender Tutorial - Earth curves [Animation nodes]笔记
https://www.youtube.com/watch?v=jEYI4lnOprY&t= Blender Tutorial - Earth curves [Animation nodes] ...
- ISCC的 Misc——WP
比赛已经结束了,自己做出来的题也不是很多,跟大家分享一下 Misc 第一题:What is that? 下载链接; 打开 解压 是一个图片 因为分值很少所以题和简单 观察图片是一个向下指的手 说明fl ...
- 安装,配置,启动FTP,SSH,NFS服务
1.安装,配置,启动FTP服务 sudo apt-get install vsftpd 修改vsftpd的配置文件/etx/vsftpd/.config,将下面几行前面的“#”去掉 #local_en ...
- 一个天气的微服务springcloud
1.开发环境 jdk8 和 gradle 4. ---------------搭建一个天气预报系统 1.bootstrap就是一堆样式文件,首先有html标签,然后加上各种样式以后就变得好看了2.j ...
- iterm2字符输入换行遮挡问题
来源:http://wonderffee.github.io/blog/2013/08/15/solve-new-line-problem-in-terminal/ .bash_profile中 进行 ...
- 统计cpu相关信息
我的cpu为i3310m 适用类型:笔记本 CPU系列:酷睿i3 3代系列 CPU主频:2.4GHz 三级缓存:3MB 插槽类型:FCBGA1023,FCPGA988 封装大小:37.5×37.5mm ...
- gcc的编译属性和选项
1.指定内存默认对其参数: __attribute__((packed)):按一字节对其__attribute__((aligned(n))):从此之后默认按n字节对其 例如: struct stu ...