1. 程式人生 > >java 中使用 python外部擴充套件包pycha

java 中使用 python外部擴充套件包pycha

因為大作業要求使用java完成,我卻作死的想用pycha,於是進行了一系列摸索。以下分享一下成果

  1. 使用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中就可以使用了。
建議單獨放在一個資料夾中,在程式退出時,清空圖片快取。