java实现运行脚本文件

news2024/10/5 15:21:18

在最近的项目中,有一个需求是前端传给我一个脚本文件,然后我需要运行脚本文件后将结果进行返回,那接下来就让我们看看是怎么做的吧!

    public R runScripts(Integer id) {
        ScriptsInfo scriptsInfo = this.baseMapper.selectById(id);
        // 将输入字符串解析为 JSONArray
        JSONArray jsonArray = JSON.parseArray(scriptsInfo.getInputParameter());
        System.out.println("解析后的JSONArray为:" + jsonArray);
        // 如果确保只有一个元素,可以直接获取第一个元素
        JSONObject jsonObject = jsonArray.getJSONObject(0);
        System.out.println("第一个元素为:" + jsonObject);
        // 将JSONObject转换为字符串输出
        String outputs = jsonObject.toJSONString();
//        String filepath= "https://yinan-bucket.oss-cn-beijing.aliyuncs.com/files/Hello1.py?Expires=1712381427&OSSAccessKeyId=TMP.3KiwQofCa6n572gJxSsgLMwqMzBpLYEpncSHgebimzpQfpmRHJDJM8yZnGjahbKATkgVtutbJqhAXuexpGu6nyESmKwMJP&Signature=cXn2noUAdoQk3niW7GhaP9pCQF8%3D";
        String filepath="E:/test/Hello1.py";
        // 初始化一个空的JSONObject作为输出
        String output = "";
        try {
            // 定义运行Python脚本的命令
            ProcessBuilder processBuilder = new ProcessBuilder("python",filepath);
            // 设置环境变量,传递参数给 Python 脚本
            processBuilder.environment().put("PARAMS",outputs);
//            String[] processBuilder = new String[]{"python",filepath, "{\"name\": \"John\", \"age\": 30,\"gender\":\"女\"}"};
            // 将错误流重定向到控制台
//            processBuilder.redirectErrorStream(true);
            // 启动进程
            Process process = processBuilder.start();
//            Process proc=Runtime.getRuntime().exec(processBuilder);
            // 从脚本中读取输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder outputBuilder = new StringBuilder();
            // 逐行读取脚本输出并添加到输出Builder
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("kdnfak"+line);
                outputBuilder.append(line).append("\n");
                System.out.println("输出:" + outputBuilder);
            }
            // 等待脚本完成并获取退出代码
            int exitCode = process.waitFor();
            System.out.println("脚本执行成功,退出代码为:" + exitCode);
            // 将输出Builder转换为字符串并将其转换为JSONObject
            output = outputBuilder.toString();
            // 打印脚本输出
            System.out.println("脚本输出:" + output);
            // 返回输出JSONObject
            return R.Success("脚本运行成功", output);
        } catch (Exception e) {
            // 打印异常堆栈
            e.printStackTrace();
            return R.Failed("后台错误,请联系管理员!");
        }
    }

以上代码就是一个运行python脚本文件的代码,如果你想要运行其它脚本文件,修改以上代码就行。(其它格式的脚本文件暂时还没有试过)

下面简单来看一下我的脚本我文件:

import json
import os
import sys

def say_hello(data):
    name = data.get("name", "Unknown")
    age = data.get("age", 0)
    gender = data.get("gender", "男")
    output_data = {
        "NAME": name,
        "AGE": age + 10,
        "GENDER": gender
    }
    return json.dumps(output_data)

if __name__ == "__main__":
    # 从环境变量中获取传入的 JSON 字符串
    input_json = os.environ.get("PARAMS", "{}")
    # 解析 JSON 字符串为 Python 字典
    input_data = json.loads(input_json)
    # 调用函数并输出结果
    output_json = say_hello(input_data)
    print(output_json)

        需要注意的为以上图片标出,ScriptsInfo为我自定义的实体类,包括了脚本的一些基本信息,就包括脚本的名字,输入参数,路径等等,读者可以根据自己的程序自定义这个实体类。

        如果读者跟我一样是将脚本文件先上传到oss上面,请注意一定要将这个文件下载到本地后使用本地的路径再执行这个代码,因为就跟我图片里面提示说的,ProcessBuilder这行代码会自动给你的文件路径加上项目路径,以至于找不到脚本文件的路径,导致错误。

我传入的参数为json格式,数据库里面存储的类型为以下形式:

所以需要进行转换为字符串才行,以上是我的所有代码,读者可以根据自己的需求进行修改~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

影响力营销与AI的结合:Kompas.ai在搭桥角色中的独特价值

在数字化营销的新时代,影响力营销已经成为品牌建立信任和提升市场影响力的有效手段。通过与关键意见领袖(KOL)的合作,品牌能够利用KOL的信誉和影响力来扩大其市场覆盖范围和提升品牌认知度。然而,寻找与品牌价值观相契…

汇编语言:寻址方式在结构化数据访问中的应用——计算人均收入

有一年多没有在CSDN上发博文了。人的工作重心总是有转移的,庆幸一直在做着有意义的事。   今天的内容,是为汇编语言课程更新一个实验项目。      本方案修改自王爽编《汇编语言》第4版P172“实验7寻址方式在结构化数据访问中的应用” …

科普|老隋分享的人力资源项目怎么样?可不可以赚钱?

近年来,随着市场竞争的加剧和企业对人才需求的不断提升,人力资源项目逐渐成为了创业者和投资者关注的焦点。老隋作为一位在人力资源领域深耕多年的专业人士,经常分享关于人力资源项目的见解和经验。那么,老隋分享的人力资源项目究…

Android Glide

1.引入glide implementation com.github.bumptech.glide:glide:4.14.2 // Skip this if you dont want to use integration libraries or configure Glide. annotationProcessor com.github.bumptech.glide:compiler:4.14.2 //Glide 注解处理器 2.AndroidManifest.xml 中添加…

截稿倒计时 CCF-B 推荐会议EGSR’24论文摘要4月9日提交

会议之眼 快讯 第35届EGSR 2024 (Eurographics Symposium on Rendering)即欧洲图形学渲染专题讨论会将于 2024 年 7月3日-5日在英国伦敦帝国理工学院举行!在EGSR之前,将有一个全新的联合研讨会,即材料外观建模(MAM)和…

【如何写论文】解决方案——删除脚注里多余的回车换行,标题的段前磅数消失问题、图像显示不完整、被截断、浮动问题

目录 一、脚注里多余的回车换行无法删除问题1.1、问题描述1.2、解决方案 二、标题前的段前磅数消失问题2.1、问题描述2.2、解决方案 三、图像显示不完整、被截断、浮动问题3.1、问题描述3.2、解决方案 一、脚注里多余的回车换行无法删除问题 1.1、问题描述 一般论文要求需要有…

Unity Toggle组件

Toggle Group组件 Allow Switch Off属性值为false时, 1,Toggle初始时默认会有一个被勾选(ison为true),可以自己打勾指定 2,不能取消勾选 Allow Switch Off属性值为true时, 1,Toggl…

无监督学习简介

无监督学习简介 一、定义和核心概念 无监督学习的定义 无监督学习是机器学习的一个关键分支,它涉及到从未标注数据中学习和提取信息。不同于其他学习类型,无监督学习的数据集没有提供任何显式的输出标签或结果。因此,这种学习方法的主要任务…

js计算器实现

文章目录 1. 演示效果2. 分析思路3. 代码实现 1. 演示效果 2. 分析思路 给每个按钮添加点击事件&#xff0c;使用eval()进行计算。 3. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&q…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; 2.计…

HubSpot如何通过自动化和优化客户服务流程,提升客户满意度和忠诚度?

HubSpot通过自动化和优化客户服务流程&#xff0c;可以有效地提升客户满意度和忠诚度。以下是HubSpot实现这一目标的几个关键步骤&#xff1a; 建立清晰的服务流程&#xff1a;首先&#xff0c;HubSpot帮助企业建立清晰、标准化的客户服务流程。这包括明确的服务阶段定义&…

Codigger Desktop:用户体验与获得收益双赢的革新之作(一)

上周&#xff0c;我们介绍了Codigger Desktop凭借其强大的功能、稳定的性能以及人性化的设计&#xff0c;成为了广大开发者的得力助手。Codigger Desktop除了是开发者的利器外&#xff0c;它以其出色的用户体验和创新的收益模式&#xff0c;为用户提供了一个全新的选择。Codigg…

【线段树】1622. 奇妙序列

本文涉及知识点 设计 数学 线段树 本文基础解法 【设计】 【数学】1622 奇妙序列 LeetCode1622. 奇妙序列 请你实现三个 API append&#xff0c;addAll 和 multAll 来实现奇妙序列。 请实现 Fancy 类 &#xff1a; Fancy() 初始化一个空序列对象。 void append(val) 将整数…

【单片机家电产品--晶闸管(可控硅)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 单片机家电产品–晶闸管 前言 记录学习单片机家电产品内容 已转载记录为主 一、知识点 1 晶体管和晶闸管之间的区别 晶体管和晶闸管之间的区别 2 什么是可控硅&#xf…

WebKit结构揭秘:探秘网页渲染的魔法之源

一、WebKit之心&#xff1a;渲染引擎的魔力 WebKit的渲染引擎是其核心所在&#xff0c;它犹如一位技艺高超的魔法师&#xff0c;将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码&#xff0c;绘制页面&#xff0c;让网页内容跃然屏上&#xff0c;展现出无尽…

宏的使用(C语言详解)

在写一个代码生成可执行文件的过程需要经过编译和链接&#xff0c;编译又要经过三部&#xff1a;预处理&#xff0c;编译&#xff0c;汇编。 #define定义的变量和宏就是在预处理阶段会处理的。 一个简单的宏定义&#xff1a; #include<stdio.h>; #define Max(a,b) a>…

【微服务】SpringCloud之Feign远程调用

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后&#xff0c;提示Another application changed your Desktop configuration&#xff0c;Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决&#xff1a; sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

TLF9471 - High-Speed CAN FD Transceiver

1 框图描述 2 功能描述 CAN收发器被设计用来承受汽车应用的恶劣条件,并支持12V应用。   SBC的控制器区域网络(CAN)收发器部分在汽车和工业应用中提供高速(HS)差分模式数据传输(最高可达2Mbaud) 和接收。它作为CAN协议控制器和与ISO 11898-2:2016和SAE J2284兼容的物理…

基于单片机干湿垃圾自动分类系统

**单片机设计介绍&#xff0c;基于单片机干湿垃圾自动分类系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的干湿垃圾自动分类系统是一个集成传感器技术、机械控制和单片机编程于一体的自动化解决方案。该系统的主要目标是实…