Java应用程序无法调用EXCEL如何调用Python模块

http://sourceforge.net/projects/jython/下载jython包,把其中的jython.jar添加到工程目录
1.在java类中直接执行python语句
view plain
import javax.script.*;&
import org.python.util.PythonI&
import java.io.*;&
import static java.lang.System.*;&
public class FirstJavaScript&
public static void main(String args[])&
& PythonInterpreter interpreter = new PythonInterpreter();&
& interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");&
& interpreter.exec("print days[1];");&&
这样得到的结果是Tue,在控制台显示出来,这是直接进行调用的。
2.在java中调用本机python脚本中的函数:
&& 首先建立一个python脚本,名字为:my_utils.py
view plain
def adder(a, b):&
&&& return a + b
然后建立一个java类,用来测试,
java类代码 FirstJavaScript:
view plain
import javax.script.*;&&
import org.python.core.PyF&
import org.python.core.PyI&
import org.python.core.PyO&
import org.python.util.PythonI&&&
import java.io.*;&
import static java.lang.System.*;
&
public class FirstJavaScript&
&&& public static void main(String args[])&
&&&&&&& PythonInterpreter interpreter = new PythonInterpreter();&
&&&&&&& interpreter.execfile("C:\\Python27\\programs\\my_utils.py");//路径,脚本名称&
&&&&&&& PyFunction func = (PyFunction)interpreter.get("adder",PyFunction.class);//adder python函数名&
&&&&&&& int a = 2010, b = 2 ;&
&&&&&&& PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));//传值,a b&
&&&&&&& System.out.println("anwser = " + pyobj.toString());&
&&& }//main&
得到的结果是:anwser = 2012
3.使用java直接执行python脚本,
建立脚本inputpy
view plain
#open files&
print 'hello'&
number=[3,5,2,0,6]&
print number&
number.sort()&
print number&
number.append(0)&
print number&
print number.count(0)&
print number.index(5)&
建立java类,调用这个脚本:
view plain
import javax.script.*;&
import org.python.core.PyF&
import org.python.core.PyI&
import org.python.core.PyO&
import org.python.util.PythonI&
import java.io.*;&
import static java.lang.System.*;&
public class FirstJavaScript&
public static void main(String args[])&
& PythonInterpreter interpreter = new PythonInterpreter();&
& interpreter.execfile("C:\\Python27\\programs\\input.py");&
得到的结果是:
view plain
hello&
[3, 5, 2, 0, 6]&
[0, 2, 3, 5, 6]&
[0, 2, 3, 5, 6, 0]&
浏览: 18430 次
来自: 沈阳
不错不错,很实用的省市区三级联动菜单
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'扫一扫体验手机阅读
python mysql模块
<span type="1" blog_id="1561650" userid='
29篇文章,7W+人气,0粉丝
MySQL全通晓
¥51.00116人订阅
高并发架构之路
¥51.00149人订阅
<span type="1" blog_id="1561650" userid='您还可以使用以下方式登录
当前位置:&>&&>&&>& > Python 调用Java实例详解
Python 调用Java实例详解
Python 调用Java实例详解
Python 对服务器端编程不如Java 所以这方面可能要调用Java代码
Linux 环境
&1 安装 jpype1
安装后测试代码:&
from jpype import *
startJVM(getDefaultJVMPath(), "-ea")
java.lang.System.out.println("Hello World")
shutdownJVM()
2 调用非jdk的jar包, test.jar
包中含有 com.Test类
public class Test {
public String test(String str){
Python 调用jar包
jar_path = os.path.join(os.path.abspath('.'), 'libs/test.jar')
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" % jar_path)
Test = jpype.JClass('com.Test')
# 或者通过JPackage引用Test类
# com = jpype.JPackage('com')
# Test = com.Test
t = Test()
res = t.test("a")
jpype.shutdownJVM()
note: 注意Linux下的权限问题
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
欢迎转载:
相关推荐:如何在Java中调用Python代码_百度知道
如何在Java中调用Python代码
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
动力节点培训知道合伙人
动力节点培训
采纳数:1486
获赞数:1009
Jython(原JPython),是一个用Java语言写的Python解释器。在没有第三方模块的情况下,通常选择利用Jython来调用Python代码,它是一个开源的JAR包,你可以到官网下载一个HelloPython程序import org.python.util.PythonIpublic class HelloPython {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.exec(&print(&#39;hello&#39;)&);}}什么是PythonInterpreter?它的中文意思即是“Python解释器”。我们知道Python程序都是通过解释器来执行的,我们在Java中创建一个“解释器”对象,模拟Python解释器的行为,通过exec(&Python语句&)直接在JVM中执行Python代码,上面代码的输出结果为:hello在Jvm中执行Python脚本interpreter.execfile(&D:/labs/mytest/hello.py&);
如上,将exec改为execfile就可以了。需要注意的是,这个.py文件不能含有第三方模块,因为这个“Python脚本”最终还是在JVM环境下执行的,如果有第三方模块将会报错:java ImportError: No module named xxx仅在Java中调用Python编写的函数先完成一个hello.py代码:def hello():return &#39;Hello&#39;在Java代码中调用这个函数:import org.python.core.PyFimport org.python.core.PyOimport org.python.util.PythonIpublic class HelloPython {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.execfile(&D:/labs/hello.py&);PyFunction pyFunction = interpreter.get(&hello&, PyFunction.class); // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型PyObject pyObject = pyFunction.__call__(); // 调用函数System.out.println(pyObject);}}上面的代码执行结果为:Hello即便只是调用一个函数,也必须先加载这个.py文件,之后再通过Jython包中所定义的类获取、调用这个函数。如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”,例如:__call__(new PyInteger(a), new PyInteger(b))a,b的类型为Java中的int型,还有诸如:PyString(String string)、PyList(Iterator&PyObject& iter) 等。详细可以参考官方的api文档。包含第三方模块的情况:一个手写识别程序这是我和舍友合作写的一个小程序,完整代码在这里: ,界面上引用了core java上的一段代码。Python代码是舍友写的,因为在Python程序中使用了第三方的NumPy模块,导致无法通过Jython执行。下面这个方法纯粹是个人思路,没有深入查资料。 核心代码如下:import java.io.*;class PyCaller {private static final String DATA_SWAP = &temp.txt&;private static final String PY_URL = System.getProperty(&user.dir&) + &&#92;&#92;test.py&;public static void writeImagePath(String path) {PrintWriter pw =try {pw = new PrintWriter(new FileWriter(new File(DATA_SWAP)));} catch (IOException e) {e.printStackTrace();}pw.print(path);pw.close();}public static String readAnswer() {BufferedRString answer =try {br = new BufferedReader(new FileReader(new File(DATA_SWAP)));answer = br.readLine();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void execPy() {Process proc =try {proc = Runtime.getRuntime().exec(&python & + PY_URL);proc.waitFor();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}// 测试码public static void main(String[] args) throws IOException, InterruptedException {writeImagePath(&D:&#92;&#92;labs&#92;&#92;mytest&#92;&#92;test.jpg&);execPy();System.out.println(readAnswer());}}实际上就是通过Java执行一个命令行指令。
黑马程序员知道合伙人
改变中国IT教育,我们正在行动
黑马程序员
知道合伙人
黑马程序员为大学毕业后,有理想、有梦想,想从事IT行业的年轻人改变自己的命运。黑马程序员成就IT黑马
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。下次自动登录
现在的位置:
& 综合 & 正文
通过python启动java程序,挺方便的分享下。
最近部署了java程序,刚开始用shell来启动,启动过程不友好也不方便,也没有守护进程。今年在整理资料的时候,发现了珍藏一套启动脚本。
挺方便的。记录下。以免忘记
这是我的java程序结构
一个jar文件,一个config配置文件 一个lib依赖包。
重点贴出 appStoreServer.py脚本代码
#!/usr/bin/python
import os, sys, time, commands
_program = 'appStoreServer.jar'
_daemon = 'appStoreServer.py'
def getProgramPid():
result = commands.getoutput("ps aux | grep java \
| grep %s | grep -v grep | awk '{print $2}'" % _program)
return result
def getDaemonPid():
result = commands.getoutput("ps aux | grep python \
| grep '%s monitor' | grep -v grep | awk '{print $2}'" % _daemon)
return result
def startProgram():
p_pid = getProgramPid()
if p_pid != '':
print('It seems this program is already running...')
print('Starting program...')
if os.system('nohup java -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -Xmn256m \
-cp %s:config/:lib/* com.xxxx.Bootstrap && log/stdio.log 2&&1 &' % _program) == 0:
print('start program successfully and pid is ' + getProgramPid())
def startDaemon():
d_pid = getDaemonPid()
if d_pid != '':
print('It seems this daemon is already running...')
print('Starting daemon...')
if os.system('nohup python %s monitor && log/daemon.log 2&&1 &' % _daemon) == 0:
print('start daemon successfully and pid is ' + getDaemonPid())
def stopProgram():
p_pid = getProgramPid()
if p_pid == '':
print('It seems this program is not running...')
os.system('kill ' + p_pid)
print('program stopped')
def stopDaemon():
d_pid = getDaemonPid()
if d_pid == '':
print('It seems daemon is not running...')
os.system('kill ' + d_pid)
print('daemon stopped')
def monitor():
time.sleep(10)
p_pid = getProgramPid()
if p_pid == '':
print('It seems this program is not running. Start it now!')
startProgram()
if __name__ == '__main__':
if(len(sys.argv) == 2):
args = sys.argv[1]
args = raw_input('Enter args: ')
logPath = os.path.curdir + os.sep + 'log'
if not os.path.exists(logPath):
os.mkdir(logPath)
if args == 'start':
startProgram()
startDaemon()
elif args == 'stop':
stopDaemon()
stopProgram()
elif args == 'restart':
stopDaemon()
stopProgram()
time.sleep(3)
startProgram()
startDaemon()
elif args == 'monitor':
print('nothing to do')
  只需要修改你的jar 和main class 入口(这就是文中 com.xxx.bootstrap部分)。python调用了nuhop命令,退出终端也可以后台运行,挺方便的,重点的是还有daemo进程
修改了,开始启动 java程序
【上篇】【下篇】

我要回帖

更多关于 用户应用程序如何调用原语功能 的文章

 

随机推荐