如何从节点js运行python脚本 - javascript

我已经在Raspberry Pi上的node.js中编写了一个服务器。
我想从中运行python脚本,但它不执行该行。在以前的实例中,我已经运行了文件,但是来到这个socket.io实例时,我无法运行该文件!尽管控制台显示了从客户端传递给它的准确输出,但是它无法读取文件。插座负责移动。

/*jshint esversion: 6 */
var express = require('express');
// library for executing system calls
const spawn = require('child_process').spawn;
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
app = express();
server = require('http').createServer(app);
io = require('socket.io').listen(server);
var colour = require('colors');
var ip = require('ip');

var PortNumber = 3000;

var xPos = 0, yPos = 0;

server.listen(PortNumber);
app.use(express.static('public'));


io.sockets.on('connection', function (socket) {

    socket.emit('ip', {value: 'http://' + ip.address() + ':8081'});

    // otp generation socket
    socket.on('userEmail', function (data) {
        var userEmail = data.value;

        // system call to generate OTP
        const OTPgeneration = spawn('python', [__dirname + '/python/OTPgeneration.py', userEmail]);
        OTPgeneration.stdout.on('data', (data) => {
            console.log(`${data}`);
        });
    });

    // otp submit button socket
    socket.on('userOtp', function (data) {
        var userOtp = data.value;
        console.log(userOtp);

        // system call to generate OTP
        const otpValidate = spawn('python', [__dirname + '/python/OTPvalidation.py', userOtp]);
        otpValidate.stdout.on('data', (data) => {
            console.log(`${data}`);

            // Get last output from python file
            var lastChar = `${data}`.slice(-2);

            if (lastChar === '0\n') {
                console.log('Wrong OTP');
            }
            else io.sockets.emit('otpConformation', {value: 'confirm'}); //sends the confirmation to all connected clients
        });
    });

    // x y values socket
    socket.on('servoPosition', function (data) {
        servoPosition = data.value;
        // servoPosition[0] is x and servoPosition[1] is y
        console.log('Reveived X: ' + servoPosition[0] + '  Y: ' + servoPosition[1]);
        // system call for i2c comminication
        const i2cData = spawn('python', [__dirname + '/python/sendI2C.py', servoPosition[0], servoPosition[1]]);
        i2cData.stdout.on('data', (data) => {
            console.log(`${data}`);
        });
    });

    // movement socket
    socket.on('movement', function (data) {
        var m = data.value;
            console.log("Movement :" + m);
  const submitMove = spawn('python', [__dirname + '/python/move.py', m]);
        submitMove.stdout.on('data', (data) => {
            console.log(`${data}`);
        });

    });
});

console.log('Server Running @'.green + ip.address().green + ":3000".green);

function readTextFile(file) {
    var rawFile = new XMLHttpRequest();
    //var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, false);
    rawFile.onreadystatechange = function () {
        if(rawFile.readyState === 4) {
            if(rawFile.status === 200 || rawFile.status === 0) {
                allText = rawFile.responseText;
                //alert(allText);
            }
        }
    };
    rawFile.send(null);
}

参考方案

尽管使用Node的本机“ child_process”模块是性能最高的选项,但使其工作起来可能很乏味。一种快速的解决方案是使用node-cmd模块。
运行npm i node-cmd --save进行安装。
通过服务器文件顶部的var cmd = require('node-cmd');导入。然后,

var pyProcess = cmd.get('python YOURPYTHONSCRIPT.py',
              function(data, err, stderr) {
                if (!err) {
                  console.log("data from python script " + data)
                } else {
                  console.log("python script cmd error: " + err)
                  }
                }
              );

根据需要进行编辑。 node-cmd有2个调用它的方法,getrunrun只需运行提供的CLI命令,而get提供回调的使用,从而可以更好地处理错误,并使stdinstdoutstderr之间的工作更加轻松。

将第三方网站的POST表单数据发送到Django - javascript

我正在托管一个Django网站,该网站存储有关用户的信息。但是,我想在第三方网站上托管表格,例如订阅电子报。我希望能够从URL中的查询集中获取信息并将其发布回我的Django网站。我有一个小脚本,可抓取queryset信息并将其放入表单上的隐藏字段中,然后发布该数据。但是,目前这是在我的网站上完成的。如果我要在其他人的网站上托管该表格,那么最好的处理方式是什…

使用Javascript和Django模板动态加载HTML图像 - javascript

我正在尝试在javascript模板中使用django加载特定的图像,但是基于django标记的格式化方式似乎遇到了问题。我在django标记中有一个标准的img静态资产来源,如下所示:{% load static %} <img src="{% static 'img/folder/logo1.svg' %}"…

JSON无法在Bottle Framework中的javascript中工作 - javascript

我现在对瓶中数据结构的使用完全感到困惑...现在,我正在使用Jquery工具ztree在我的网页中构建树。index.py:data = [{'name':'1'}, {'name':'2'}] return template('index', data) 但…

提交初始化后删除某些帖子数据 - javascript

在初始化提交之后但在将数据发送到处理页面之前,是否可以过滤$ _POST表单数据?我想象过程的方式:提交->收集$ _POST数据->发送数据我想做的事:提交->收集$ _POST数据->删除某些元素->发送数据这样就不必更改处理页面以过滤掉不希望接收的元素了吗? javascript大神给出的解决方案 当然可以,您可以在JS …

Javascript无法读取Django模板中字典的键和值 - javascript

我有一本像这样的字典:dest = {2: [u'canada', u'A', 'Ottawa'], 5: [u'Malaysia', u'A', 'KualaLumpur'],...} 然后,我尝试使用javascript从Django模…