news 2026/6/10 12:46:53

vue展示node express调用python解析tdms

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue展示node express调用python解析tdms

python解析的代码:

import sys import json import numpy as np from nptdms import TdmsFile def parse_tdms_file(file_path, group_name): """ 解析TDMS文件并返回指定通道的数据 """ try: # 读取TDMS文件 tdms_file = TdmsFile.read(file_path) # 获取指定组和通道 group = tdms_file[group_name] # channel = group[channel_name] channel_ia = group["Ia"] channel_ib = group["Ib"] channel_ic = group["Ic"] channel_uab = group["Uab"] channel_ubc = group["Ubc"] channel_uca = group["Uca"] channel_ua = group["Ua"] channel_ub = group["Ub"] channel_uc = group["Uc"] # 获取数据 data_ia = channel_ia[:] data_ib = channel_ib[:] data_ic = channel_ic[:] data_uab = channel_uab[:] data_ubc = channel_ubc[:] data_uca = channel_uca[:] data_ua = channel_ua[:] data_ub = channel_ub[:] data_uc = channel_uc[:] # 如果数据太大,可以采样 # if len(data) > 10000: # indices = np.linspace(0, len(data)-1, 10000, dtype=int) # data = data[indices] if len(data_ia) > 10000: indices = np.linspace(0, len(data_ia)-1, 10000, dtype=int) data_ia = data_ia[indices] if len(data_ib) > 10000: indices = np.linspace(0, len(data_ib)-1, 10000, dtype=int) data_ib = data_ib[indices] if len(data_ic) > 10000: indices = np.linspace(0, len(data_ic)-1, 10000, dtype=int) data_ic = data_ic[indices] if len(data_uab) > 10000: indices = np.linspace(0, len(data_uab)-1, 10000, dtype=int) data_uab = data_uab[indices] if len(data_ubc) > 10000: indices = np.linspace(0, len(data_ubc)-1, 10000, dtype=int) data_ubc = data_ubc[indices] if len(data_uca) > 10000: indices = np.linspace(0, len(data_uca)-1, 10000, dtype=int) data_uca = data_uca[indices] if len(data_ua) > 10000: indices = np.linspace(0, len(data_ua)-1, 10000, dtype=int) data_ua = data_ua[indices] if len(data_ub) > 10000: indices = np.linspace(0, len(data_ub)-1, 10000, dtype=int) data_ub = data_ub[indices] if len(data_uc) > 10000: indices = np.linspace(0, len(data_uc)-1, 10000, dtype=int) data_uc = data_uc[indices] # 转换为Python列表 data_list_ia = data_ia.tolist() if isinstance(data_ia, np.ndarray) else list(data_ia) data_list_ib = data_ib.tolist() if isinstance(data_ib, np.ndarray) else list(data_ib) data_list_ic = data_ic.tolist() if isinstance(data_ic, np.ndarray) else list(data_ic) data_list_uab = data_uab.tolist() if isinstance(data_uab, np.ndarray) else list(data_uab) data_list_ubc = data_ubc.tolist() if isinstance(data_ubc, np.ndarray) else list(data_ubc) data_list_uca = data_uca.tolist() if isinstance(data_uca, np.ndarray) else list(data_uca) data_list_ua = data_ua.tolist() if isinstance(data_ua, np.ndarray) else list(data_ua) data_list_ub = data_ub.tolist() if isinstance(data_ub, np.ndarray) else list(data_ub) data_list_uc = data_uc.tolist() if isinstance(data_uc, np.ndarray) else list(data_uc) # 转换为Python列表 # data_list = data_ib.tolist() if isinstance(data_ib, np.ndarray) else list(data_ib) return { "success": True, "data_ia": data_list_ia, "data_ib": data_list_ib, "data_ic": data_list_ic, "data_uab": data_list_uab, "data_ubc": data_list_ubc, "data_uca": data_list_uca, "data_ua": data_list_ua, "data_ub": data_list_ub, "data_uc": data_list_uc, "length": len(data_list_ia), "min": float(np.min(data_ia)), "max": float(np.max(data_ia)), "mean": float(np.mean(data_ia)) } except Exception as e: return { "success": False, "error": str(e) } if __name__ == "__main__": # 从命令行参数获取输入 if len(sys.argv) >= 4: file_path = sys.argv[1] group_name = sys.argv[2] # channel_name = sys.argv[3] result = parse_tdms_file(file_path, group_name) print(json.dumps(result, ensure_ascii=False)) else: print(json.dumps({ "success": False, "error": "参数不足,需要文件路径、组名和通道名" }))

node代码:

const path = require("path"); const { spawn } = require("child_process"); // 解析TDMS文件 // 解析TDMS文件的API router.get("/tdms_data", async (req, res) => { try { const { group = "采集数据" } = req.query; // 调用Python脚本 const pythonProcess = spawn("python", [ "E:\\project\\***\\***\\parse_tdms.py", "E:\\project\\***\\***\\test_ac.tdms", group, ]); let output = ""; let errorOutput = ""; // 收集标准输出 pythonProcess.stdout.on("data", (data) => { output += data.toString(); }); // 收集错误输出 pythonProcess.stderr.on("data", (data) => { errorOutput += data.toString(); }); // 处理进程结束 pythonProcess.on("close", (code) => { if (code === 0) { try { const result = JSON.parse(output); res.json({ success: true, code: 20000, data: result, message: "解析TDMS文件成功", }); } catch (parseError) { res.status(500).json({ code:20001, success: false, error: `解析Python输出失败: ${parseError.message}`, rawOutput: output, }); } } else { res.status(500).json({ code:20001, success: false, error: `Python脚本执行失败 (退出码: ${code})`, pythonError: errorOutput, }); } }); } catch (error) { res.status(500).json({ code:20001, success: false, error: error.message, }); } });

vue代码:

parseTdms() { this.listLoading = true parseTdmsDo(this.device_name).then(response => { if(response.success&&response.data.success){ const llength=response.data.length; this.timeData = Array.from({ length: llength }, (_, i) => i) this.iaData =response.data.data_ia; this.ibData =response.data.data_ib; this.icData =response.data.data_ic; this.uabData =response.data.data_uab; this.ubcData =response.data.data_ubc; this.ucaData =response.data.data_uca; this.uaData =response.data.data_ua; this.ubData =response.data.data_ub; this.ucData =response.data.data_uc; console.log("更新了数据!!") this.updateChartIa() this.updateChartIb() this.updateChartIc() this.updateChartUab() this.updateChartUbc() this.updateChartUca() this.updateChartUa() this.updateChartUb() this.updateChartUc() } this.listLoading = false }).catch(error => { console.error('API调用失败:', error) this.listLoading = false this.$message({ message: 'API调用失败,请检查网络连接', type: 'error', duration: 5 * 1000 }) }) },

vue的api:

// 获取tdms数据 export function parseTdmsDo(device_name) { return request({ url: '/vue-element-admin/device/tdms_data', method: 'get', params: { device_name } }) }

展示:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:58:16

内网横向——VulnStack-2靶场万字详细解析教程(MSF渗透,黄金票据利用)

本教程围绕 VulnStack-2 靶场展开,从外网信息收集、漏洞利用获取初始权限入手,逐步讲解内网横向移动、黄金票据提权的完整渗透流程,带你沉浸式体验真实内网攻防场景。 文章目录靶场介绍攻击技术网络配置信息内网网段设置NAT网段设置靶机设置W…

作者头像 李华
网站建设 2026/6/9 21:02:27

立体仓库“数字堆垛”:重力仿真让货架承重利用率提12%

堆垛规划是立体仓库高效运营的核心,货架承重利用率直接决定仓储容量、运营成本与存储安全。传统立体仓库堆垛依赖人工经验分配货位,仅简单根据货物重量粗略摆放,无法精准测算货物堆放后的重力分布,为规避货架过载风险,…

作者头像 李华
网站建设 2026/6/10 11:29:59

微软紧急更新修复Office 0Day漏洞(CVE-2026-21509)

漏洞影响范围微软发布带外安全更新,修复了一个正在被积极利用的Office 0Day漏洞(CVE-2026-21509)。该安全功能绕过漏洞影响多个Office版本,包括Microsoft Office 2016、Microsoft Office 2019、Microsoft Office LTSC 2021、Micro…

作者头像 李华
网站建设 2026/6/10 11:44:29

ChatGPT引用马斯克AI生成的Grokipedia是否陷入“内容陷阱“?

Grokipedia是由埃隆马斯克的人工智能公司xAI创建的wikipedia式知识库,其独特之处在于所有内容均由Grok AI自主编写。该平台从互联网采集原始数据,经过综合处理后生成百科全书式条目。 "内容陷阱" 的潜在风险 近期观察发现,ChatGP…

作者头像 李华
网站建设 2026/6/10 11:29:43

宠物交流平台的设计与实现(11811)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/5/28 22:15:52

f8x工具使用教程:红队/蓝队环境一键自动化部署

f8x 是由 ffffffff0x 团队开发的一款开源红/蓝队环境自动化部署工具(GitHub 项目地址:https://github.com/ffffffff0x/f8x),专为渗透测试、安全研究人员设计。它能帮助用户在 VPS 或服务器上快速一键安装常用基础工具、开发环境以…

作者头像 李华