How to run commands via NodeJS child process?

前端 未结 4 1295
南旧
南旧 2020-12-02 16:01

I am trying to run commands on Windows via NodeJS child processes:

var terminal = require(\'child_process\').spawn(\'cmd\');

terminal.stdout.on(\'data\', fu         


        
相关标签:
4条回答
  • 2020-12-02 16:15

    Make sure you stdin.end() at some point or the child process won't exit.

    0 讨论(0)
  • 2020-12-02 16:26

    You can use child_process exec method. here is an example:

    var exec = require('child_process').exec,
        child;
    
    child = exec('echo %PATH%',
        function (error, stdout, stderr) {
            if(stdout!==''){
                console.log('---------stdout: ---------\n' + stdout);
            }
            if(stderr!==''){
                console.log('---------stderr: ---------\n' + stderr);
            }
            if (error !== null) {
                console.log('---------exec error: ---------\n[' + error+']');
            }
        });
    
    0 讨论(0)
  • 2020-12-02 16:29

    Sending a newline \n will exectue the command. .end() will exit the shell.

    I modified the example to work with bash as I'm on osx.

    var terminal = require('child_process').spawn('bash');
    
    terminal.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });
    
    terminal.on('exit', function (code) {
        console.log('child process exited with code ' + code);
    });
    
    setTimeout(function() {
        console.log('Sending stdin to terminal');
        terminal.stdin.write('echo "Hello $USER. Your machine runs since:"\n');
        terminal.stdin.write('uptime\n');
        console.log('Ending terminal session');
        terminal.stdin.end();
    }, 1000);
    

    The output will be:

    Sending stdin to terminal
    Ending terminal session
    stdout: Hello root. Your machine runs since:
    stdout: 9:47  up 50 mins, 2 users, load averages: 1.75 1.58 1.42
    child process exited with code 0
    
    0 讨论(0)
  • 2020-12-02 16:32

    You just have to send line end (\n) with the command:

    setTimeout(function() {
        terminal.stdin.write('echo %PATH%\n');
    }, 2000);
    
    0 讨论(0)
提交回复
热议问题