java 中使用 python外部擴充套件包pycha
阿新 • • 發佈:2018-11-23
因為大作業要求使用java完成,我卻作死的想用pycha,於是進行了一系列摸索。以下分享一下成果
- 使用java呼叫python有大概三種方法,這個網上都可以查到,但是對於有外部擴充套件包的python指令碼,只有一種方法可以執行,另外兩種都會報錯說 no module named xxx。
Process process = Runtime.getRuntime().exec(arg);
arg是你需要傳遞的引數,鑑於arg是陣列的形式,於是我將資料形式儲存為一維陣列,奇數項為下標,偶數為數值(雖然不太合理,但是暫時沒有想到別的方法)
2.於是將test.java 寫成如下:
String[] a = { "2005", "1000", "2006", "2000", "2007", "1500", "2008", "2340" };
String[] arg = new String[] { "C:\\Python27\\python.exe", "pycha-0.7.0\\examples\\test.py" };
int alength = a.length;
int arglength = arg.length;
arg = Arrays.copyOf(arg, alength + arglength);// 擴容
System.arraycopy(a, 0, arg, arglength, alength);// 將第二個陣列與第一個數組合並
Process process = Runtime.getRuntime().exec(arg);
3.接下來需要寫test.py來接收引數並且畫出pycha的圖表
import sys
import cairo
from pycha.pie import PieChart
print "script name:", sys.argv[0]
i=1;
list = []
while i<len(sys.argv):
print "Parameter:", i, sys.argv[i]
list.append((sys.argv[i], [[0, float(sys.argv [i + 1])]])) #奇數項為下標,偶數項為數值,新增進list中
i = i + 2
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 400, 400)
chart = PieChart(surface)
dataSet = tuple(list) #將list轉化為tuple
chart.addDataset(dataSet) #設定資料
chart.render()
surface.write_to_png("testpie.png")#生成圖表
4.test.py的指令碼目錄下會產生testpie.png,在java中就可以使用了。
建議單獨放在一個資料夾中,在程式退出時,清空圖片快取。