Jython:java呼叫python檔案之第三方包路徑問題
本方法解決python程式碼的可移植性,不需要在新機器上配置python環境,只通過安裝jython的方式將python程式碼嵌入java工程
1. Jython如何安裝
傻瓜式下一步安裝方式,路徑最好和工程選在同一目錄下。
2. 執行python程式碼
舉個簡單例子,安裝好java環境及eclipse之後,copy如下程式碼即可執行。註釋部分為執行檔案的方式,需要新建檔案後去掉註釋執行。
3. 處理第三方包import java.io.IOException; import org.python.util.PythonInterpreter; public class test { public static void main(String args[]) throws IOException { PythonInterpreter interpreter = new PythonInterpreter(); // 執行python語句 interpreter.exec("a = \"hello, Jython\""); interpreter.exec("print a"); // 執行python檔案 // interpreter.exec("filepy = \"E:\\test.py\""); // interpreter.execfile(filepy); ///執行python py檔案 // filepy.close(); } }
在檔案執行方式中,
第一種情況:如果.py檔案中包含同一目錄的自定義包,則在eclipse工程下可正常呼叫。
第二種情況:如果包含第三方包,需要拷貝到當前目錄下。
第三種情況:由於路徑問題無法呼叫。Jython/lib檔案下有大量第三方包,如os, re, __future__,重複拷貝費時費力,這時可手動修改path路徑。(推薦)
修改路徑有兩種方式:
(1) Java方式
import org.python.core.Py; import org.python.core.PySystemState; System.out.println(sys.path.toString()); // previous PySystemState sys = Py.getSystemState(); sys.path.add("E:\\sacaapm-paserver\\src-python\\jython\\Lib"); System.out.println(sys.path.toString()); // later
將程式碼嵌入part 2程式碼,得到完整程式碼後執行,可以看到前後路徑發生變化。
(2) python方式
interpreter.exec("import sys");
interpreter.exec("print sys.path");
(3) 靈活運用以上兩種方式或其組合形式。
當import sys時報出“sys模組不存在”的錯誤,建議使用第一種。
完整程式碼如下:
執行結果:import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.python.core.Py; import org.python.core.PySystemState; import org.python.util.PythonInterpreter; public class test { public static void main(String args[]) throws IOException { PythonInterpreter interpreter = new PythonInterpreter(); PySystemState sys = Py.getSystemState(); sys.path.add("E:\\src-python\\jython\\Lib"); interpreter.exec("import sys"); interpreter.exec("print sys.path"); interpreter.exec("path = \"E:\\src-python\\jython\\Lib\""); interpreter.exec("sys.path.append(path)"); interpreter.exec("print sys.path"); interpreter.exec("a=3; b=5;"); InputStream filepy = new FileInputStream("E:\\input.py"); interpreter.execfile(filepy); filepy.close(); } }
['E:\\lib\\Lib', '__classpath__', '__pyclasspath__/', u'E:\\src-python\\jython\\Lib']
['E:\\lib\\Lib', '__classpath__', '__pyclasspath__/', u'E:\\src-python\\jython\\Lib', 'E:\\src-python\\jython\\Lib']
a/b= 0.6
E:\\input.py檔案程式碼:
from __future__ import division
print "a/b=",a/b
其中變數a, b的值由java傳入。
相關推薦
Jython:java呼叫python檔案之第三方包路徑問題
本方法解決python程式碼的可移植性,不需要在新機器上配置python環境,只通過安裝jython的方式將python程式碼嵌入java工程 1. Jython如何安裝 傻瓜式下一步安裝方式,路徑最好和工程選在同一目錄下。 2. 執行python程式碼 舉個簡單例子,安
idea中通過java程式直接呼叫python檔案
專案用python開發時大量引入了外包,當需要在java中使用該程式碼時考慮要麼轉成java語言(太麻煩),要麼打包成jar(沒找到合適的方法),參考了一些java呼叫python檔案方法,並不適合我目前開發的環境,下面給出idea下直接呼叫的方法。 一、在i
jython環境安裝、java呼叫python、中文亂碼問題
1、jython安裝 jython下載地址 http://www.jython.org/downloads.html (1)直接雙擊“jython-installer-2.7.0.jar”一步步安裝即可 (2)配置環境變數, 新建系統環境變數: JYTHON_HO
【Loadrunner】 java vuser 採用cmd方式呼叫python檔案,執行zeromq請求和資料protobuf反序列化
背景:由於第一次接觸zeromq,對其瞭解甚少,於是度娘對其原理了解一番後,就開始了接下來實踐“坑”中,首先在LR中,對於用socekt、java、c那種方式來實現,通過抓包對比,以及socekt和c語言可實現,但複雜度有點”呵呵“,而用java開發的zero
Jython:Java如何傳值給Python
想在Java工程中呼叫Python指令碼,最關鍵的是python指令碼需要使用Java實時傳遞過來的變數。因此麻煩了,到處找教程。中文教程為零,還好有Stack Over Flow,輸入關鍵字:jython java passing variable topython,果真
Java併發(一) 之 Java呼叫native檔案
1.2 環境配置 1.2.1 OpenJDK 安裝 yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 獲取java home: dirname $(readlink $(readlink $(which java))) 設定環境變數: v
JavaSE入門學習23:Java面向對象之構造方法
ons 抽象類 什麽 ont 機會 語法 好的 error return 學了JavaSE面向對象這一部分,也該對構造方法做一個總結了。 一構造方法 在多數情況下,初始化一個對象的終於步驟是去調用這個對象的構造方法。構造
ElasticSearch(三):Java操作ElasticSearch索引之CRUD
transport delete end std testin python網絡 search ava socket 1 package com.gxy.ESChap01; 2 3 import java.net.InetAddress; 4 impor
java 呼叫音訊檔案
public static void main(String[] args) throws MalformedURLException, InterruptedException { String fileName="F:\\KuGou\\test.wav"; //選擇播放
Python之路(十三):異常處理 python基礎之異常處理
python基礎之異常處理 基本異常處理 舉個簡單的例子 num = input(">>>") try: res = int(num) print(res)
java調Python指令碼(四):java返回Python錯誤日誌
上一篇java調Python指令碼時沒有返回錯誤的日誌提醒行等,在這裡補上,主要用java.lang.Process.getErrorStream() 方法獲取子程序的錯誤流。資料流獲取由該Process物件表示的程序的錯誤輸出流的管道的資料。 1、java程式碼: pub
java調Python指令碼(二):java調Python亂碼問題
java調Python返回結果出現亂碼解決: Python指令碼編碼格式已經用了utf-8,但是返回還是亂碼,說明是java這邊傳過去編碼有問題。 1、Python編碼格式: 2、一般我們中文文字編碼格式常用的有:UTF-8,GBK,GB2312。分別試一下就知道了:
Runtime.getRuntime().exec()實現Java呼叫python程式
使用Runtime.getRuntime().exec()來實現Java呼叫python,呼叫程式碼如下所示: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
學習資源分享| 第一篇:Java,Python,PHP,VUE,Angular,React一網打盡
公眾號回覆“學習”,拉你進程式設計師技術討論群,乾貨資源第一時間分享。 後端: java: 慕課網Activiti6.0工作流引擎深度解析與實戰: 慕課網BAT大牛親授 基於ElasticSearch的搜房網實戰: 慕課網BAT網際網路公司校招面試題: 慕課
關於JAVA呼叫Python指令碼並傳遞引數
JAVA 程式呼叫python指令碼目前存在兩種形式。第一種:運用JAVA本身的自帶功能;第二種:使用jython Jar包的自帶方法來呼叫python指令碼 呼叫準備: 首先你要在本地獲取LINUX環境安裝python環境,如果是JYTHON的話需要安裝JYTHON,兩
讀書筆記:java多執行緒之執行緒同步
閱讀的書籍:《java瘋狂講義》 關鍵詞:執行緒安全問題,同步程式碼塊,同步方法,釋放同步監視器的鎖定,同步鎖,死鎖 執行緒安全問題:當使用多個執行緒來訪問同一個資料時,會導致一些錯誤情況的發生 到底什麼是執行緒安全問題呢,先看一個經典的案例:銀行取錢的問題
bat檔案-呼叫Python檔案
初次學習bat批處理,利用bat檔案呼叫python檔案及bat檔案。 set pwd=%cd% rmdir %pwd%\code /s/q call %pwd%\bat\c600_code_xcopy.bat G: cd %pwd% cd .. python
java呼叫批檔案(.bat)並動態傳參
java程式碼: package test; import java.io.IOException; public class TestMain { public static void main(String [] args) { try { Proc
Java呼叫Python指令碼(Python3,Windows10系統)
介紹下如何在Java中呼叫Python指令碼,可能是目前最簡單的方法(●’^'●)。 又是師姐的任務,要求把我的Python程式整合到純Java的系統中。於是在網上又是一頓搜尋,不乏各種厲害的方法。其中最常見的是Jython,聽起來十分高大上,直接把世界上
MongoDB工具類:java操作對檔案的增刪查改
前言 1.MongoDB,是一個基於分散式檔案儲存的資料庫,是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富、最像關係資料庫的,它的特點是高效能、易部署、易使用,儲存資料非常方便。在實際的專案操作中,我們不僅能用來儲存各種複雜的