Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从节点js运行python脚本_Javascript_Python_Node.js_Sockets - Fatal编程技术网

Javascript 如何从节点js运行python脚本

Javascript 如何从节点js运行python脚本,javascript,python,node.js,sockets,Javascript,Python,Node.js,Sockets,我已经在Raspberry Pi上的node.js中编写了一个服务器。 我想从中运行python脚本,但它不执行该行。在以前的实例中,我已经运行了文件,但是在socket.io的这个实例中,我无法运行该文件!尽管控制台显示从客户端传递给它的准确输出,但它无法读取文件。插座负责移动 /*jshint esversion: 6 */ var express = require('express'); // library for executing system calls const spawn

我已经在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);
}
虽然使用节点的本机“child_process”模块是性能最好的选项,但要让它工作起来可能会很繁琐。快速解决方案是使用
节点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
有两个调用它的方法,
get
run
run
只运行提供的CLI命令,而
get
提供了回调的使用,允许更好的错误处理,并使得在
stdin
stdout
之间工作,
stderr
容易得多。

命令失败时,stderr和退出代码包含什么?正确-请同时添加这些部分以及stdout回调:OTPgeneration.stderr.on('data',(data)=>{console.log(
${data}
;});OTPgeneration.on('close',(code)=>{console.log(
${code}
);});根据要求,上述代码工作正常。套接字模块未按预期工作。该节点从未执行python move.py脚本。即使移动套接字处的控制台也可以正常工作。。