JAVA调用Python脚本执行
SpringBoot-web环境
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
springboot--启动类
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication sp = new SpringApplication(DemoApplication.class);
sp.addListeners(new ApplicationPidFileWriter());
ConfigurableApplicationContext applicationContext = sp.run(args);
Environment env = applicationContext.getEnvironment();
String port = env.getProperty("server.port");
System.out.print("\n----------------------------------------------------------\n\t" +
"Application is running! Access URL:\n\t" +
"Local: \t\thttp://localhost:" + port + "/\n\t" +
"----------------------------------------------------------\n\t");
}
}
RestController接口
package com.example.demo.demos.web;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/datahub")
public class SqlLineageController {
@Value("${datahub.sqllineage.shell.path:/home/datahub/sqlShell}")
private String sqlShellPath;
@Value("${datahub.sqllineage.shell.python.name:lineage_emitter_dataset_finegrained_sample.py}")
private String pythonShellName;
@Value("${datahub.sqllineage.shell.python.version:python3}")
private String pythonShellVersion;
private String sqlTextName = "/sql.txt";
@RequestMapping(value = "/sqlEncodeBase64", method = {RequestMethod.GET, RequestMethod.POST})
public String createTableLineage(@RequestParam("sql") String sql) throws IOException {
byte[] encode = Base64.getEncoder().encode(sql.getBytes(StandardCharsets.UTF_8));
return new String(encode,StandardCharsets.UTF_8);
}
@RequestMapping(value = "/createTableLineage", method = {RequestMethod.GET, RequestMethod.POST})
public Map<String, Object> createTableLineage(@RequestBody Map<String, Object> sql, HttpServletRequest request) {
Map<String, Object> resp = new HashMap<>();
resp.put("code", 500);
try {
Object insertLineageSql = null;
if (sql.containsKey("sql")) {
insertLineageSql = sql.get("sql");
} else {
resp.put("msg", "SQl必传....");
return resp;
}
String executeSqlBase64 = insertLineageSql.toString();
byte[] decodedBytes = Base64.getDecoder().decode(executeSqlBase64);
String executeSql = new String(decodedBytes, StandardCharsets.UTF_8);
String categorySql = URLDecoder.decode(executeSql, "UTF-8").replace("\t"," ");
int i = executePythonSql(sqlShellPath, categorySql);
System.out.println(executeSql + "执行结果:" + i);
if (i == 0) {
resp.put("code", 200);
resp.put("msg", "success");
return resp;
}
resp.put("msg", "服务器错误....");
return resp;
} catch (IOException e) {
resp.put("msg", e.getMessage());
return resp;
}
}
public int executePythonSql(String sqlPythonLocalValue, String sql) throws IOException {
FileWriter fileWriter = new FileWriter(sqlPythonLocalValue + sqlTextName);
fileWriter.write("");
fileWriter.write(sql);
fileWriter.close();
// 定义要执行的Shell命令
String command = pythonShellVersion + " " + sqlPythonLocalValue + "/" + pythonShellName;
System.out.println(command);
try {
// 开始执行Shell命令并获取输入流
Process process = new ProcessBuilder()
.command("bash", "-c", command)
.redirectErrorStream(true)
.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder output = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
output.append(line).append("\n");
}
int exitCode = process.waitFor();
System.out.println("Exit Code: " + exitCode);
System.out.println("Output:\n" + output.toString());
return exitCode;
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1;
}
}
配置 命令执行的Python脚本位置
datahub.sqllineage.shell.path=/home/datahub/sqlShell
datahub.sqllineage.shell.python.name=lineage_emitter_dataset_finegrained_sample.py
datahub.sqllineage.shell.python.version=python3
结束。。。
JAVA调用Python脚本执行的更多相关文章
- (转)java调用python脚本
这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...
- 通过Java调用Python脚本
在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...
- java调用python脚本并向python脚本传递参数
1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...
- [Java/Python] java调用python脚本问题记录
Java调用Python的的两种方式 1.Runtime private static String call_python(String input_argv) { String python_py ...
- Java调用Python脚本并获取返回值
在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...
- java调用python脚本 并传参(根据配置文件获取python文件地址)
方式一: Java代码 package com.mybatis.plus.utils; import cn.hutool.core.lang.Console; import java.io.Buffe ...
- Java调用Python脚本
今天遇到Java调用一个Python脚本的问题,纠结了大半天,遇到各种问题.网上搜索的大部分都是用jython,但是我想要调用的python脚本里有import urllib,这个urllib也不是什 ...
- java 调用 python 脚本
有时候在java项目里,需要执行Python脚本以下几种方式: 1.直接执行Python脚本代码 引用 org.python包 创建一个 python解释器,貌似这种方式不可以导入第三方库,模块... ...
- Java调用SQL脚本执行的方案
在Java中调用SQL脚本的方式有多种,在这里只记录一种自己常用的方式,个人觉得挺实用方便的. 运用ScriptRunner这个类. import org.apache.ibatis.io.Resou ...
- Java调用Python脚本工具类
[本文出自天外归云的博客园] 在网上查了很多方法都不成功,在google上搜到一篇文章,做了一些小修改,能够处理中文输出.提取一个运行python脚本的Java工具类如下: package com.a ...
随机推荐
- IntelliJ IDEA安装与配置(支持最新2020.2)
前言 我是从eclipse转IDEA的,对于习惯了eclipse快捷键的我来说,转IDEA开始很不习惯,IDEA快捷键多,组合多,记不住,虽然可以设置使用eclipse的快捷键,但是总感觉怪怪的.开始 ...
- pitch、yaw、roll三个角的区别
Z轴正方向为前进方向 pitch():俯仰,将物体绕X轴旋转(localRotationX) yaw():航向,将物体绕Y轴旋转(localRotationY) roll():横滚,将物体绕Z轴旋转( ...
- STK V11.2 64位下载及视频
1.AGI Systems Tool Kit (STK) 11.2 64位+含补丁激活教程:下载地址 2.STK视频学习资料(一):下载地址
- 即时通讯技术文集(第32期):IM开发综合技术合集(Part5) [共12篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第32 期. [- 1 -] IM开发干货分享:如何优雅的实现大量离线消息的可靠投递 [链接] ...
- OpenMMLab AI实战营 第五课笔记
OpenMMLab AI实战营 第五课笔记 目录 OpenMMLab AI实战营 第五课笔记 在气球数据集上训练检测模型 进入 mmdetection 主目录 下载并观察气球数据集 下载训练好的mas ...
- Python 问题汇总
一. Python 环境问题 使用pytest 在terminal中执行脚本调用python3.9, 而使用pycharm 的virtualenv 执行脚本调用的是python3.10, 由于环境不一 ...
- Harbor 共享后端高可用
1. 主机配置 主机地址 主机配置 主机角色 软件版本 192.168.1.60 CPU:4C MEM:4GB Disk: 100GB Harbor+Keepalived Harbor 2.1.3 K ...
- Hugo|30分钟搭建完整的个人博客
本文将讲述如何使用 Hugo,从0到1完成一个"静态博客"的搭建.展示 hugo 可以通过简单配置,自定义装饰博客界面的能力,并集成网站数据统计能力. 下一篇文章将教会你将站点免费 ...
- mac sublime text3-快捷键
cmd+n 新建页面 cmd+数字键 切换到对应页面 cmd+p 搜索跳转到对应页 cmd+w 关闭页面 cmd+j 合并一行 cmd+d 选中当前单词,继续敲可以选中多个 cmd+l 选中当前行 c ...
- Kotlin:反引号中的函数命名、匿名函数、函数类型与隐式返回