splincode
splincode

Reputation: 67

How to execute the shell-script in NodeJS and wait for it to display and get in the stream?

I have connection in hardware with console But it work's with commands:

enter image description here

I create omron.sh because I need to run it in a nodeJS

#!/bin/sh

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/splincode/Develop/omron/c++_modules/libomron/omron-build/lib/
~/Develop/omron/usr/local/bin/omron_790IT_test

But me need it's work in NodeJS and write to stream stdout, however, not work

server.js:

let http = require('http'), 
    fs = require('fs'),
    url = require('url'),
    path = require('path');

let server = new http.Server(); // EventEmitter

server.listen(8000, '127.0.0.1');
server.on("connection", () => console.log("connection"));
server.on('request', (request, response) => {

    console.log('.', request.url)

    let userUrl = decodeURIComponent(url.parse(request.url).pathname);
    let loadFile = false;

    switch(userUrl) {
        case '/': 
            userUrl += 'index.html';
            loadFile = true;
        break;

        case '/omron':

            console.log('omron')

            var util=require('util')
            var exec=require('child_process').spawn('sh', ['omron.sh']);

            // not work
            exec.stdout.on('data', (data) => {
              console.log(`stdout: ${data}`);
              response.end(`${data}`);
            }); 

        break;

        default: 
            loadFile = true;
        break;
    };


    if (userUrl === '/') userUrl += 'index.html';


    if (loadFile) {
        let pathname = path.normalize(path.join(__dirname, userUrl));
        fs.readFile(pathname, (err, content) => {
            let mime = require('mime').lookup(pathname);
            response.setHeader('Content-Type', `${mime}; charset=utf-8`);
            response.end(content);
        });
    }


});

However, not work it, I need to give the shell-script a response to the output stream, but how?

enter image description here

Upvotes: 0

Views: 2715

Answers (1)

Adiii
Adiii

Reputation: 59966

node-cmd

 Simple commandline/terminal interface to allow you to run cli or
     bash style commands as if you were in the terminal.

Run commands asynchronously, and if needed can get the output as a string.

so do some thing like this to solve your problem

var cmd=require('node-cmd');

cmd.get(
    'pwd',
    function(data){
        console.log('the current working dir is : ',data)
    }
);

cmd.run('whoami');

Upvotes: 2

Related Questions