java实现运行脚本文件

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

    public R runScripts(Integer id) {ScriptsInfo scriptsInfo = this.baseMapper.selectById(id);// 将输入字符串解析为 JSONArrayJSONArray 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();// 逐行读取脚本输出并添加到输出BuilderString 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转换为字符串并将其转换为JSONObjectoutput = outputBuilder.toString();// 打印脚本输出System.out.println("脚本输出:" + output);// 返回输出JSONObjectreturn R.Success("脚本运行成功", output);} catch (Exception e) {// 打印异常堆栈e.printStackTrace();return R.Failed("后台错误,请联系管理员!");}}

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

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

import json
import os
import sysdef 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.hqwc.cn/news/597704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让H5页面轻松打开第三方App,Xinstall助力实现无缝跳转

在移动互联网时代,H5页面因其跨平台、易传播的特性而被广泛应用,然而H5页面在打开第三方App时往往存在诸多不便。用户需要通过复杂的操作步骤才能实现跳转,这无疑降低了用户体验。为了解决这一难题,Xinstall应运而生,为…

cesium entity默认的点击事件

一、单击事件 点击entity,屏幕出现一个绿色的框,不想显示这个绿色框有两个办法 1、在创建viewer的时候,设置selectionIndicator为false // 初始化地图容器viewer new Cesium.Viewer(cesiumContainer, {contextOptions: {webgl: {alpha: tru…

【记录40】echarts

environmentEcharts(_list) {var myEcharts echarts.init(this.$refs.environment);// var datalist this.data_list;var data _list//偏移量var offsetData [[90, 73],[70, 33],[50, 63],[30, 33],[10, 73],];//symbolSize 散点气泡大小var symbolSizeData [100, 100, 100…

C++ 一种简单的软件验证码 程序授权使用 收费付费使用 无需注册 用机器码得到一个加密值 再对比加密值是否一致 只需加密

简单软件授权方案 1、获取机器码,发给软件开发者 2、开发者用机器码加密得到一个密文 发给使用者 3、使用者 用这个密文 与本地计算密文比较密文是否一致,一致就把密文写入到注册表,下次登录从注册表读密文对比。 (最重要的是密…

城市郊野公园“风筝节”视频智能识别技术安全监管方案

一、方案背景 四月天气十分舒适,微风拂面,这段时间也是游客前往户外放风筝的好时机,很多城市都举办了“风筝节”等活动,尤其是在周末节假日期间,城市各个郊野公园的游客量逐渐暴增。然而,随着参与人数的增…

揭秘闲鱼首饰市场,七天螺旋暴力起号玩法,最详细保姆式教学,日入1000+

大家好今天给大家带来的课程是揭秘首饰市场,七天螺旋暴力起号玩法,全网最新最详细项目保姆式教学,日入四位数项目0门槛一台设备就能操作!!!揭秘闲鱼首饰市场,七天螺旋暴力起号玩法,最详细保姆式教学,日入1000+ - 百创网-源码交易平台_网站源码_商城源码_小程序源码 首…

数字人解决方案——Champ单个视频单张图像生成可控且一致的人体视频生成

概述 Champ是阿里巴巴集团、南京大学和复旦大学的研究团队共同提出了一种创新的人体动画生成技术,Champ能够在仅有一段原始视频和一张静态图片的情况下,激活图片中的人物,使其按照视频中的动作进行动态表现,极大地促进了虚拟主播…

通用开发技能系列:MySQL进阶

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能 MySQL进阶 内容进行学习 1.SQL基础语法 通用开发技能系列:SQL基础语法学习 2.进阶篇 2.1.存储引擎 2.1.1.MySQL体系结构: 2.1…

蓝桥杯杯赛之深度优先搜索优化《1.分成互质组》 《 2.小猫爬山》【dfs】【深度搜索剪枝优化】【搜索顺序】

文章目录 思想例题1. 分成互质组题目链接题目描述【解法一】【解法二】 2. 小猫爬山题目链接题目描述输入样例:输出样例:【思路】【WA代码】【AC代码】 思想 本质为两种搜索顺序: 枚举当前元素可以放入哪一组枚举每一组可以放入哪些元素 操…

数字逻辑分析仪初体验

为啥会用到这玩意儿,要从一个荒诞的需求开始。想在市面上找一款特别低空飞行的监控,而且不想它一直开着监控,最好是我在外面远程指挥它起飞,飞去厨房,飞去洗手间,甚至飞去阳台,查看水龙头情况啊…

交错字符串

题目链接 交错字符串 题目描述 注意点 s1、s2、和 s3 都由小写英文字母组成0 < s1.length, s2.length < 1000 < s3.length < 200能否仅使用 O(s2.length) 额外的内存空间来解决它 解答思路 最初想到的是使用深度优先遍历&#xff0c;使用指针指向当前s3需要的…

【协议篇:Http与Https】

1. Http 1.1 Http的定义 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是用于分布式、协作式和超媒体信息系统的应用层协议。它是互联网上最广泛应用的数据通信协议之一&#xff0c;尤其对于万维网&#xff08;WWW&#xff09;服务而言…