文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在node中如何调用python脚本

2024-04-02 19:55

关注

node调用python脚本

使用场景

在某测试项目需要用到eload仪器为待测产品添加载荷,然后用dmm仪器测量电压,eload仪器与dmm仪器与电脑的连接都是usb接口,那么软件如何控制这两个usb连接的仪器呢。

通过搜索发现npm上有一个usb的依赖包,它可以查询到与电脑相连接的usb设备,但是我无法向usb设备发送命令。

所以我只能通过python脚本向usb设备发命令,然后在node中再调用python脚本。

1、准备运行环境,获取python路径

python的运行需要有python的环境,软件安装包可能安装在没有python环境的电脑上。所以我们在nw中将python(python-pro文件夹)包括进去,打包时一起打包出来(打包时会将nw包中的东西一起打包)。

将要调用的python脚本文件放到python-pro文件夹下。

if(global.hasOwnProperty('nw')){
  fs = nw.require('fs');
  path= nw.require('path');
  dirpath = path.dirname(process.execPath)
  pythonPro = dirpath+'/python-pro/'
}

process.execPath为当前启动 Node.js 进程的可执行文件的绝对路径,包含执行文件名及其后缀,例如‘E:\Nw-package\nwjs-sdk-v0.39.0-win-x64\nw37.exe’,

path.dirname方法会返回 path 的目录名(路径中去除最后的执行文件名),上述绝对路径会返回‘E:\Nw-package\nwjs-sdk-v0.39.0-win-x64’

pythonPro = dirpath+’/python-pro/’,就找到了python所在的文件夹。

2、前端把命令字符串和python路径传给后端

封装调用方法

async operate_usb(usbName,act,command,...args){
        let cmd= "\""+usbName +"\""+ " "+"\""+ act+"\"" + " " +"\""+ command+"\"";
        args.forEach(item=>{
            cmd=cmd+" "+item;
        })
        let res = await CommandUtils.callCmd_usb(pythonPro, cmd);
        console.log(command+'请求结果:',res);
        return res  
    },

拼接命令字符串,调用时需要传入命令,根据python接口格式拼接好命令。

注意命令要用ml中参数要用空格隔开,参数要用双引号包起来(不能用单引号)然后又通过Meteor.call调用服务端注册的方法调用。

把python路径、命令字符串传过去。

3、服务端调用python脚本

1、再次拼接命令字符串

 let cmdStr="python "+"call_instrument.py " + cmd;

2、调用

path = path.split('/').join("\\")
return new Promise((resolve, reject) => {
    exec(cmdStr,{
      cwd:path,
    }, function (error, stdout, stderr) {
      if (error) {
        console.error('cmdFunc_usb error: ' + error);
        resolve(error)
        return;
      }
      console.log('receive: ' + stdout);
      resolve(stdout);
    });
  })

通过exec()方法调用,

exec的文档

nodejs调用python输出中文乱码

nodejs调用python3脚本输出中文乱码的问题

问题如图

代码如图

解决方法如下

在源代码中添加

如果你未引入sys,请同时引入sys

结果如下

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯