当前位置:   article > 正文

【springboot+python】 尝试springboot调用python的demo_springboot集成python

springboot集成python

只是一个尝试demo

python代码

import sys


def detect(path):
    print("python running:")
    return "python result:"+path


if __name__ == '__main__':
# 参数从argv的第二个元素开始,第一个元素是运行的程序名
    path = sys.argv[1]
    print(detect(path))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

springboot的controller

@RestController
public class DetectController {

    @GetMapping
    public void  detect(HttpServletRequest request){
        String path = request.getAttribute("path").toString();

        try {
            // 一维数组,第二个参数是文件的路径,后面的是python代码的参数
            // 我猜是通过命令行指令?
            String[] args = new String[]{"python","D:\\pycharm_project\\test\\lungDetect\\detect.py",path};
            // 执行py文件
            Process process = Runtime.getRuntime().exec(args);
            // 获取输出的结果(打印在控制台的字符?)
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = in.readLine();
            while(line!=null){
                // 显示结果
                System.out.println("springboot执行python结果:"+line);
                line = in.readLine();
            }
            in.close();
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }


        System.out.println("controller任务已完成");
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

springboot的测试用例

@SpringBootTest
class DetectControllerTest {
    DetectController detectController;


    @Autowired
    public void setDetectController(DetectController detectController) {
        this.detectController = detectController;
    }

    @Test
    void detect() {
        HttpServletRequest request = new MockHttpServletRequest();
        request.setAttribute("path","www.heguchangan.xyz");
        detectController.detect(request);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

结果

在这里插入图片描述

原理

猜想是java通过使用命令行执行执行python xxx.py,来执行python文件,然后将打印出来的结果读取到io中在打印出来。具体原理待学习。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/201121
推荐阅读
相关标签
  

闽ICP备14008679号