Python 官方文档:入门教程 => 点击学习
目录node调用python脚本使用场景1、准备运行环境,获取Python路径2、前端把命令字符串和python路径传给后端3、服务端调用python脚本nodejs调用python
在某测试项目需要用到eload仪器为待测产品添加载荷,然后用dmm仪器测量电压,eload仪器与dmm仪器与电脑的连接都是usb接口,那么软件如何控制这两个usb连接的仪器呢。
通过搜索发现npm上有一个usb的依赖包,它可以查询到与电脑相连接的usb设备,但是我无法向usb设备发送命令。
所以我只能通过python脚本向usb设备发命令,然后在node中再调用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所在的文件夹。
封装调用方法
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路径、命令字符串传过去。
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调用python3脚本输出中文乱码的问题
问题如图
代码如图
在源代码中添加
如果你未引入sys,请同时引入sys
结果如下
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: 在node中如何调用python脚本
本文链接: https://lsjlt.com/news/166938.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0