品牌网站开发价格,湖南网站建设磐石网络最好,哪个网站开发小程序,wordpress 短信发送在最近的项目中#xff0c;有一个需求是前端传给我一个脚本文件#xff0c;然后我需要运行脚本文件后将结果进行返回#xff0c;那接下来就让我们看看是怎么做的吧#xff01; public R runScripts(Integer id) {ScriptsInfo scriptsInfo this.baseMapper.selectById(id);…在最近的项目中有一个需求是前端传给我一个脚本文件然后我需要运行脚本文件后将结果进行返回那接下来就让我们看看是怎么做的吧 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?Expires1712381427OSSAccessKeyIdTMP.3KiwQofCa6n572gJxSsgLMwqMzBpLYEpncSHgebimzpQfpmRHJDJM8yZnGjahbKATkgVtutbJqhAXuexpGu6nyESmKwMJPSignaturecXn2noUAdoQk3niW7GhaP9pCQF8%3D;String filepathE:/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 procRuntime.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(kdnfakline);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格式数据库里面存储的类型为以下形式 所以需要进行转换为字符串才行以上是我的所有代码读者可以根据自己的需求进行修改~