<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    java調python

    文檔

    java調python

    java調python主要有兩種方法:1、使用Runtime.getRuntime()執行腳本文件;2、將python腳本寫成進程為java提供服務。
    推薦度:
    導讀java調python主要有兩種方法:1、使用Runtime.getRuntime()執行腳本文件;2、將python腳本寫成進程為java提供服務。

    很多朋友都想知道java怎么調python?下面就一起來了解一下吧~

    java調python主要有兩種方法:1.使用Runtime.getRuntime()執行腳本文件;2. 將python腳本寫成進程為java提供服務,下面是具體的方法介紹:

    第一種:使用Runtime.getRuntime()執行腳本文件

    先建立python腳本文件 demo.py

    import?numpy?as?np
    
    a?=?np.arange(12).reshape(3,4)print(a)

    java調用python程序并輸出該結果

    import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStreamReader;public?class?Demo?{
    
    ????public?static?void?main(String[]?args)?{
    ????????//?TODO?Auto-generated?method?stub
    ????????Process?proc;
    ????????try?{
    ????????????proc?=?Runtime.getRuntime().exec("python?D:\\demo.py");//?執行py文件
    ????????????//用輸入輸出流來截取結果
    ????????????BufferedReader?in?=?new?BufferedReader(new?InputStreamReader(proc.getInputStream()));
    ????????????String?line?=?null;
    ????????????while?((line?=?in.readLine())?!=?null)?{
    ????????????????System.out.println(line);
    ????????????}
    ????????????in.close();
    ????????????proc.waitFor();
    ????????}?catch?(IOException?e)?{
    ????????????e.printStackTrace();
    ????????}?catch?(InterruptedException?e)?{
    ????????????e.printStackTrace();
    ????????}?
    ????}}

    如若向python程序中函數傳遞參數并執行出結果,下面就舉一例來說明一下。同樣建立python腳本文件demo2.py

    import?sys
    
    def?func(a,b):
    ????return?(a+b)if?__name__?==?'__main__':
    ????a?=?[]
    ????for?i?in?range(1,?len(sys.argv)):
    ????????a.append((int(sys.argv[i])))
    
    ????print(func(a[0],a[1]))

    其中sys.argv用于獲取參數url1,url2等。而sys.argv[0]代表python程序名,所以列表從1開始讀取參數。以上代碼實現一個兩個數做加法的程序,下面看看在java中怎么傳遞函數參數,代碼如下:

    int?a?=?18;int?b?=?23;try?{
    ????String[]?args?=?new?String[]?{?"python",?"D:\\demo2.py",?String.valueOf(a),?String.valueOf(b)?};
    ????Process?proc?=?Runtime.getRuntime().exec(args);//?執行py文件
    
    ????BufferedReader?in?=?new?BufferedReader(new?InputStreamReader(proc.getInputStream()));
    ????String?line?=?null;
    ????while?((line?=?in.readLine())?!=?null)?{
    ????????System.out.println(line);
    ????}
    ????in.close();
    ????proc.waitFor();}?catch?(IOException?e)?{
    ????e.printStackTrace();}?catch?(InterruptedException?e)?{
    ????e.printStackTrace();}

    其中args是String[] { “python”,path,url1,url2 }; ,path是python程序所在的路徑,url1是參數1,url2是參數2,以此類推。

    2. 將python腳本寫成進程為java提供服務

    python腳本文件如下:

    import?socketimport?sysimport?threadingimport?numpy?as?npfrom?PIL?import?Imagedef?main():
    ????#?創建服務器套接字
    ????serversocket?=?socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ????#?獲取本地主機名稱
    ????host?=?socket.gethostname()
    ????#?設置一個端口
    ????port?=?12345
    ????#?將套接字與本地主機和端口綁定
    ????serversocket.bind((host,port))
    ????#?設置監聽最大連接數
    ????serversocket.listen(5)
    ????#?獲取本地服務器的連接信息
    ????myaddr?=?serversocket.getsockname()
    ????print("服務器地址:%s"%str(myaddr))
    ????#?循環等待接受客戶端信息
    ????while?True:
    ????????#?獲取一個客戶端連接
    ????????clientsocket,addr?=?serversocket.accept()
    ????????print("連接地址:%s"?%?str(addr))
    ????????try:
    ????????????t?=?ServerThreading(clientsocket)#為每一個請求開啟一個處理線程
    ????????????t.start()
    ????????????pass
    ????????except?Exception?as?identifier:
    ????????????print(identifier)
    ????????????pass
    ????????pass
    ????serversocket.close()
    ????passclass?ServerThreading(threading.Thread):
    ????#?words?=?text2vec.load_lexicon()
    ????def?__init__(self,clientsocket,recvsize=1024*1024,encoding="utf-8"):
    ????????threading.Thread.__init__(self)
    ????????self._socket?=?clientsocket
    ????????self._recvsize?=?recvsize
    ????????self._encoding?=?encoding????????pass
    
    ????def?run(self):
    ????????print("開啟線程.....")
    ????????try:
    ????????????#接受數據
    ????????????msg?=?''
    ????????????while?True:
    ????????????????#?讀取recvsize個字節
    ????????????????rec?=?self._socket.recv(self._recvsize)
    ????????????????#?解碼
    ????????????????msg?+=?rec.decode(self._encoding)
    ????????????????#?文本接受是否完畢,因為python?socket不能自己判斷接收數據是否完畢,
    ????????????????#?所以需要自定義協議標志數據接受完畢
    ????????????????if?msg.strip().endswith('over'):
    ????????????????????msg=msg[:-4]
    ????????????????????break
    ???????????
    ????????????sendmsg?=?Image.open(msg)
    ????????????#?發送數據
    ????????????self._socket.send(("%s"%sendmsg).encode(self._encoding))
    ????????????pass
    ????????except?Exception?as?identifier:
    ????????????self._socket.send("500".encode(self._encoding))
    ????????????print(identifier)
    ????????????pass
    ????????finally:
    ????????????self._socket.close()?
    ????????print("任務結束.....")
    ????????
    ????????pass
    
    ????def?__del__(self):
    ????????passif?__name__?==?"__main__":
    ????main()

    在java代碼中訪問python進程的代碼:

    package?hello;import?java.lang.System;import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStreamReader;import?java.net.InetAddress;import?java.net.Socket;import?java.io.OutputStream;import?java.io.PrintStream;import?java.io.InputStream;public?class?hello?{
    ????public?static?void?main(String[]?args){
    ????????//System.out.println("Hello?World!");
    ????????//?TODO?Auto-generated?method?stub
    
    ????????try?{
    ????????????InetAddress?addr?=?InetAddress.getLocalHost();
    ????????????String?host=addr.getHostName();
    ????????????//String?ip=addr.getHostAddress().toString();?//獲取本機ip
    ????????????//log.info("調用遠程接口:host=>"+ip+",port=>"+12345);
    
    ????????????//?初始化套接字,設置訪問服務的主機和進程端口號,HOST是訪問python進程的主機名稱,可以是IP地址或者域名,PORT是python進程綁定的端口號
    ????????????Socket?socket?=?new?Socket(host,12345);
    
    ????????????//?獲取輸出流對象
    ????????????OutputStream?os?=?socket.getOutputStream();
    ????????????PrintStream?out?=?new?PrintStream(os);
    ????????????//?發送內容
    ????????????out.print(?"F:\\xxx\\0000.jpg");
    ????????????//?告訴服務進程,內容發送完畢,可以開始處理
    ????????????out.print("over");
    
    ????????????//?獲取服務進程的輸入流
    ????????????InputStream?is?=?socket.getInputStream();
    ????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(is,"utf-8"));
    ????????????String?tmp?=?null;
    ????????????StringBuilder?sb?=?new?StringBuilder();
    ????????????//?讀取內容
    ????????????while((tmp=br.readLine())!=null)
    ????????????????sb.append(tmp).append('\n');
    ????????????System.out.print(sb);
    ????????????//?解析結果
    ????????????//JSONArray?res?=?JSON.parseArray(sb.toString());
    ????????}?catch?(IOException?e)?{
    ????????????e.printStackTrace();
    ????????}finally?{
    ????????????try?{if(socket!=null)?socket.close();}?catch?(IOException?e)?{}
    ????????????System.out.print("遠程接口調用結束.");
    ????????}
    ??????}}

    以上就是小編今天的分享,希望可以幫到大家。

    文檔

    java調python

    java調python主要有兩種方法:1、使用Runtime.getRuntime()執行腳本文件;2、將python腳本寫成進程為java提供服務。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    java decode java decodeuri java delegate java調用c++接口 java調用c++ java獲取絕對值 java delete java調用asmx接口 java dependency java dev java fastdfs java development java dict java fastjson java feign java divide java field java field獲取值 java dockerfile java file.exists() java decaf java讀取本地excel java讀取json java dataset java規則引擎 java dataframe java表單校驗 java獲得當前路徑 java dashboard java獲取隨機數 java daemon java獲取隨機字符串 java ctp java獲取運行時間 java cssbox java獲取路徑 java獲取請求域名 java csrf java獲取視頻時長 java crontab
    Top 99re在线这里只有精品| 毛片亚洲AV无码精品国产午夜 | 亚洲熟妇成人精品一区| 国产精品香蕉在线观看| 国产高清在线精品二区一| 91精品国产综合久久精品| 尤物精品视频一区二区三区| 日韩精品无码一区二区三区免费 | 中国精品videossex中国高清| 日韩精品一区二区三区中文字幕| 亚洲国产精品成人精品小说| 99久久国产综合精品麻豆| 热re久久精品国产99热| 国产成人精品高清在线观看99| 中文字幕精品亚洲无线码一区| 日韩精品视频免费观看| 国产福利91精品一区二区| 亚洲国产精品婷婷久久| 精品视频一区二区三区| 青青热久久国产久精品 | 久久99精品久久久久久hb无码| 国产线视频精品免费观看视频| 国产大片91精品免费看3| 亚洲色偷精品一区二区三区| 久久久久久国产精品免费无码| 久热精品人妻视频| 日韩精品无码Av一区二区| MM1313亚洲精品无码久久| 亚洲国产精品综合久久久| 久久国产乱子伦精品免费一 | 91精品久久久久久无码| 亚洲AV永久无码精品水牛影视| 久久人搡人人玩人妻精品首页| 香蕉视频在线精品| 精品人妻潮喷久久久又裸又黄| 8AV国产精品爽爽ⅴa在线观看| 久久九九兔免费精品6| 99热精品国产麻豆| 无码精品A∨在线观看中文| 日本一区精品久久久久影院| 国产精品一区二区久久不卡|