在node中如何调用python脚本

 更新时间:2022年09月06日 11:04:41   作者:龙易安  
这篇文章主要介绍了在node中如何调用python脚本,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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;
  • 第一个字符串"python "调用的命令行的开头,是用命令行调用python脚本的固定写法
  • 第二个字符串"call_instrument.py "是调用的python脚本文件名称
  • 第三个参数是前端传过来的命令
  • 字符串之间用空格隔开

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的文档

  • 第一个参数是运行的命令
  • 第二个参数是配置对象,cwd是执行的路径
  • 第三个是回调函数,进程终止时调用,stdout是返回结果 

nodejs调用python输出中文乱码

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

问题如图

代码如图

解决方法如下

在源代码中添加

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

结果如下

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 手把手教你通过nodejs快速搭建一个服务器

    手把手教你通过nodejs快速搭建一个服务器

    这篇文章主要给大家介绍了关于如何通过nodejs快速搭建一个服务器的相关资料,在node.js中创建一个服务器非常简单,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 详解Nodejs内存治理

    详解Nodejs内存治理

    本篇文章给大家分享了Nodejs内存处理相关的知识点以及实例代码分享,有兴趣的朋友跟着学习下。
    2018-05-05
  • 关于Error:EPERM:operation not permitted,mkdir...的几种解决办法对比

    关于Error:EPERM:operation not permitted,mkdir...的几种解决办法对比

    这篇文章主要给大家介绍了关于Error:EPERM:operation not permitted,mkdir...的几种解决办法对比,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-01-01
  • Nodejs实现文件上传的示例代码

    Nodejs实现文件上传的示例代码

    这篇文章主要介绍了Nodejs文件上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 如何能分清npm cnpm npx nvm

    如何能分清npm cnpm npx nvm

    这篇文章主要介绍了如何能分清npm cnpm npx nvm,本文就详细的来介绍一下区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Node.js中.pfx后缀文件的处理方法

    Node.js中.pfx后缀文件的处理方法

    这篇文章主要介绍了Node.js中.pfx后缀文件的处理方法,文中介绍的很详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • nodejs中的express-jwt的使用解读

    nodejs中的express-jwt的使用解读

    这篇文章主要介绍了nodejs中的express-jwt的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 简单实现node.js图片上传

    简单实现node.js图片上传

    这篇文章主要为大家详细介绍了node.js图片上传的简单实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 使用 NodeJS+Express 开发服务端的简单介绍

    使用 NodeJS+Express 开发服务端的简单介绍

    这篇文章主要介绍了使用 NodeJS+Express 开发服务端的简单介绍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • Windows 系统下设置Nodejs NPM全局路径

    Windows 系统下设置Nodejs NPM全局路径

    这篇文章主要介绍了Windows 系统下设置Nodejs NPM全局路径
    2016-04-04

最新评论