Java程序中实现调用Python脚本的方法详解
本文实例讲述了Java程序中实现调用Python脚本的方法。分享给大家供大家参考,具体如下:
在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法。
1、在Eclipse中新建Maven工程;
2、pom.xml文件中添加如下依赖包之后updatemaven工程;
org.python jython 2.7.0 org.python jython-standalone 2.7.0
3、编写如下测试代码;
importorg.python.util.PythonInterpreter; publicclassJpythonScript{ publicstaticvoidmain(Stringargs[]){ PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun');"); interpreter.exec("printdays[1];"); } }
4、测试:
出现如下错误:
console:Failedtoinstall'':java.nio.charset.UnsupportedCharsetException:cp0.
Exceptioninthread"main"ImportError:Cannotimportsitemoduleanditsdependencies:Nomodulenamedsite
Determineifthefollowingattributesarecorrect:
*sys.path:['...python\\jython\\2.7.0\\Lib','__classpath__','__pyclasspath__/']
Thisattributemightbeincludingthewrongdirectories,suchasfromCPython
*sys.prefix:***\jython\2.7.0
Thisattributeissetbythesystempropertypython.home,althoughitcan
beoftenautomaticallydeterminedbythelocationoftheJythonjarfile
Youcanusethe-Soptionorpython.import.site=falsetonotimportthesitemodule
5、问题解决:
重构代码如下:
importjava.util.Properties; importorg.python.util.PythonInterpreter; publicclassJpythonScript{ publicstaticvoidmain(Stringargs[]){ Propertiesprops=newProperties(); props.put("python.home","pathtotheLibfolder"); props.put("python.console.encoding","UTF-8"); props.put("python.security.respectJavaAccessibility","false"); props.put("python.import.site","false"); Propertiespreprops=System.getProperties(); PythonInterpreter.initialize(preprops,props,newString[0]); PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun');"); interpreter.exec("printdays[1];"); } }
6、编译成功。
7、解决问题参考:
http://bugs.jython.org/issue2355
补充:jpython抛错Cannotimportsitemodule的解决方法
Exceptioninthread"main"ImportError:Cannotimportsitemoduleanditsdependencies:Nomodulenamedsite
publicclassJpythonScript{ publicstaticvoidmain(Stringargs[]){ Propertiesprops=newProperties(); props.put("python.import.site","false"); Propertiespreprops=System.getProperties(); PythonInterpreter.initialize(preprops,props,newString[0]); PythonInterpreterinterpreter=newPythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun');"); interpreter.exec("printdays[1];"); }
//进行复杂类接受处理 Mapres=newHashMap (); res.put("1","Danny"); res.put("2","Fanny"); PythonInterpreterinterpM=newPythonInterpreter(); interpM.execfile("./src/com/DataDeal.py"); PyFunctionpyFunctionM=(PyFunction)interpM.get("main",PyFunction.class); Map tableM=newHashMap (); tableM.put(newPyString("conf"),PyJavaType.wrapJavaObject(res)); PyDictionarypydM=newPyDictionary(tableM);
更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。