在node中如何调用python脚本

目录
  • node调用python脚本
    • 使用场景
    • 1、准备运行环境,获取python路径
    • 2、前端把命令字符串和python路径传给后端
    • 3、服务端调用python脚本
  • nodejs调用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

结果如下

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

(0)

相关推荐

  • Node与Python 双向通信的实现代码

    目录 进程通信 进程双向通信 存在问题 总结 第三方数据供应商把数据和Python封装到一起,只能通过调用 Python方法来实现数据查询,如果可以通过Node 简单封装下实现 Python 方法调用可以快速上线并节省开发成本. 最简单粗暴的通信方式是 Nodejs调用一下 Python 脚本,然后获取子进程的输出,但是由于每次 Python 启动并加载数据包的过程比较漫长,所以对该过程优化. 进程通信 index.py # 封装的 Python 包, 体积巨大 from mb import M

  • node.js调用脚本(python/shell)和系统命令

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child_process.html,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入.标准输出及标准错误输出的接口. NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 标准输入.标准输出及标准错误输出的接口 child.stdin 获取标准输入 child.

  • 3种python调用其他脚本的方法

    1.用python调用python脚本 #!/usr/local/bin/python3.7 import time import os count = 0 str = ('python b.py') result1 = os.system(str) print(result1) while True: count = count + 1 if count == 8: print('this count is:',count) break else: time.sleep(1) print('t

  • 在node中如何调用python脚本

    目录 node调用python脚本 使用场景 1.准备运行环境,获取python路径 2.前端把命令字符串和python路径传给后端 3.服务端调用python脚本 nodejs调用python输出中文乱码 解决方法如下 node调用python脚本 使用场景 在某测试项目需要用到eload仪器为待测产品添加载荷,然后用dmm仪器测量电压,eload仪器与dmm仪器与电脑的连接都是usb接口,那么软件如何控制这两个usb连接的仪器呢. 通过搜索发现npm上有一个usb的依赖包,它可以查询到与电脑

  • Java程序中实现调用Python脚本的方法详解

    本文实例讲述了Java程序中实现调用Python脚本的方法.分享给大家供大家参考,具体如下: 在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后update maven工程: <dependency> <groupId>org.python</groupId> <artifactId>jython</ar

  • 详解C++调用Python脚本中的函数的实例代码

    1.环境配置 安装完python后,把python的include和lib拷贝到自己的工程目录下 然后在工程中包括进去 2.例子 先写一个python的测试脚本,如下 这个脚本里面定义了两个函数Hello()和_add().我的脚本的文件名叫mytest.py C++代码: #include "stdafx.h" #include <stdlib.h> #include <iostream> #include "include\Python.h&quo

  • C语言中程序如何调用Python脚本

    有时候在写C语言程序的时候又想利用一下python强大的模块,于是C与python的混合编程便应运而生. 下面简单说说在C语言编译环境中调用python脚本文件的基础应用. 一.环境配置 以vs2017为例. 0x00 平台 首先你要知道你电脑上安装的python环境是64位还是32位,vs的编译平台需要与python环境一致. 比如我的python环境是64位,vs工程就要配置成x64. 右键点击你的解决方案,点击属性, 0x01 添加 包含目录 和 库目录 在属性窗口双击"VC++ Dire

  • 教你在Excel中调用Python脚本实现数据自动化处理的方法

    目录 一.为什么将Python与Excel VBA集成? 二.为什么使用xlwings? 三.玩转xlwings 这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作. 说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球仍有7.5亿忠实用户,而作为网红语言的Python,也仅仅只有700万的开发人员. Excel是全世界最流行的编程语言.对,你没看错,自从微软引入了LAMBDA定义函数后,Excel已经可以实现编

  • C#调用Python脚本的简单示例

    IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Hugunin所发起,是一个开源的项目,基于微软的 DLR引擎.IronPython的在CodePlex上的主页:http://ironpython.codeplex.com/ 使用场景: 如果你的小伙伴会写Python脚本,而且已经实现大部分项目的功能不需要再用C# 实现.现在缺少窗体,此时Python+C#的组合就可以完美的结局问题啦! 示例: 借由IronPython,就可以利用.NET执行存储在P

  • 在VS2017中用C#调用python脚本的实现

    情景是这样的:在C#中调用python脚本进行post请求,python脚本中使用了requests包. Python的开发环境我们有比较多的选择,pycharm.sublime text等等.但是作为.net平台的Python语言ironPython,可以和C#交互,让编程更活泛. ironPython本身其实就是一个python的开发环境,我的电脑上还装有python2.7和pycharm,开始的时候使用pycharm写的,本来的想法是用VS直接调用就可以了.但是后来才明白这三者的关系. p

  • Jmeter调用Python脚本实现参数互相传递的实现

    接口性能测试时,接口请求参数是根据一定的规则拼接后进行MD5加密后再进行传参,因此借助于python脚本实现,则可以有效提升测试效率. 1.分析参数加密规则:NonceStr:时间戳 + 一个小于 1000 的随机数: Sign:"UserID=" + UserID+ "&" + "NonceStr=" + NonceStr + "固定的字符串": 其中UserID是上千个不同的数据已进行CSV文件参数化处理: 2.编

  • Java调用Python脚本传递数据并返回计算结果

    需求:最近在使用基于Java编写的Cloudsim 4.0云仿真平台进行虚拟机动态迁移实验,由于中间有需要用到深度强化学习算法,因此需要将集群的状态表示为二维数组,比如物理机的计算能力Mips,RAM,带宽等等.希望将这样的二维数组传入到带torch等第三方库的Python脚本进行深度强化学习训练,所以就有二维int数组的传入,和从Python计算后的结果返回读取这个需求 一.实现思路:将Java中的data结构化为字符串,以命令行参数的形式传入Python中 目前有几种Java调用Python

  • Jmeter通过OS进程取样器调用Python脚本实现参数互传

    1. Python中 sys.argv的用法解释:sys.argv可以让python脚本从程序外部获取参数,sys.argv是一个列表,可用[]提取其中的元素,其第一个元素是程序本身,随后才依次是外部给予的参数,可以接受多个参数,每个参数用空格隔开即可. '''该脚本用于jmeter的OS进程提取器的调用''' import hashlib import sys import time   parameter = sys.argv # print(parameter, type(paramete

随机推荐