最简实例,易上手,python 作为服务端,java 等语言进行调用

整体思路是:

  python本身作为服务端和客户端,但是可以用其他语言,调用python命令,只用执行函数,然后获取函数返回值,那么其他语言就能获取python函数执行过的信息。

python/server.py:

 1 import socket
 2 
 3 
 4 HOST = ''                 # Symbolic name meaning all available interfaces
 5 PORT = 50007              # Arbitrary non-privileged port
 6 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 7 s.bind((HOST, PORT))
 8 s.listen(1)
 9 while 1:
10     conn, addr = s.accept()
11     print('Connected by', addr)
12     data = conn.recv(1024)
13     if not data: break
14     method=str(data)[2]
15     if(method=="1"):
16         conn.sendall(("111").encode())
17     else:
18         conn.sendall(("DDDDD").encode())
19     # update plot
20     conn.close()

python/client.py

import socket

HOST = '127.0.0.1'  # The remote host
PORT = 50007  # The same port as used by the server

#调用服务端接口
def cl_get_text():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.sendall((str(1)).encode())
    data = []
    while True:
        subdata = s.recv(20480)
        if not subdata: break
        data.append(str(subdata, encoding='utf-8'))
    data= ''.join(data)

    s.close()
    return data


if __name__ =="__main__":
    # 预测训练文件
    #将训练文件的预测结果以csv文件的形式存放到result中
    for i in range(10):
        print(i)
        print(cl_get_text())

java:

 1 package com.util;
 2 import java.io.BufferedReader;
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.io.UnsupportedEncodingException;
 8 import java.util.ArrayList;
 9 import java.util.List;
10 
11 
12 public class Ppyrun {
13     static final String workspace=Config.workspace;//client.py所在的文件夹
14     public static void main(String args[])
15     {
16         String a=send_text();
17         System.out.println(a);
18     }
19     
20     
21     public static String send_text()
22     {
23         String predict_result="";
24         Runtime proc;
25         proc = Runtime.getRuntime();
26         try {
27             Process result=proc.exec("python");
28             OutputStream output=result.getOutputStream();
29             runOutput(output,"import os");
30             runOutput(output,"os.chdir('"+workspace+"')");
31             runOutput(output,"import client");
32             runOutput(output,"print(client.cl_get_text())");
33             runFinish(output);
34             InputStream input=result.getInputStream();
35             BufferedReader br = null;
36             br = new BufferedReader(new InputStreamReader(input, "GB2312"));
37             String line = null;
38             while ((line = br.readLine()) != null) {
39                 predict_result+=line+"\r\n";
40             }
41             input.close();
42             result.waitFor();
43         }catch (IOException | InterruptedException e) {
44             // TODO 自动生成的 catch 块
45             e.printStackTrace();
46         }
47         return predict_result;
48     }
49     
50     
51     public static void runOutput(OutputStream outstream,String command)
52     {
53         try {
54 //            outstream.write((new String(command.getBytes("utf-8"),"GBK")+"\r\n").getBytes("GBK"));
55             outstream.write((command+"\r\n").getBytes("UTF-8"));
56         } catch (IOException e) {
57             // TODO 自动生成的 catch 块
58             e.printStackTrace();
59         }
60     }
61 
62 
63     public static void runFinish(OutputStream outstream)
64     {
65         try {
66             outstream.flush();
67             outstream.close();
68         } catch (IOException e) {
69             // TODO 自动生成的 catch 块
70             e.printStackTrace();
71         }
72         
73     }
74 }

 

posted @ 2020-12-08 10:29  博二爷  阅读(386)  评论(0编辑  收藏  举报