Execute bash command in Node.js and get exit code

后端 未结 4 967
忘了有多久
忘了有多久 2020-12-13 02:02

I can run a bash command in node.js like so:

var sys = require(\'sys\')
var exec = require(\'child_process\').exec;

function puts(error, stdout, stderr) { s         


        
相关标签:
4条回答
  • 2020-12-13 02:35

    child_process.spawnSync()

    This function exposes the nicest sync interface: https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options

    Example:

    #!/usr/bin/env node
    
    const child_process = require('child_process');
    let out;
    
    out = child_process.spawnSync('true');
    console.log('status: ' + out.status);
    console.log('stdout: ' + out.stdout.toString('utf8'));
    console.log('stderr: ' + out.stderr.toString('utf8'));
    console.log();
    
    out = child_process.spawnSync('false');
    console.log('status: ' + out.status);
    console.log('stdout: ' + out.stdout.toString('utf8'));
    console.log('stderr: ' + out.stderr.toString('utf8'));
    console.log();
    
    out = child_process.spawnSync('echo', ['abc']);
    console.log('status: ' + out.status);
    console.log('stdout: ' + out.stdout.toString('utf8'));
    console.log('stderr: ' + out.stderr.toString('utf8'));
    console.log();
    

    Output:

    status: 0
    stdout: 
    stderr: 
    
    status: 1
    stdout: 
    stderr: 
    
    status: 0
    stdout: abc
    
    stderr: 
    
    

    Tested in Node.js v10.15.1, Ubuntu 19.10.

    0 讨论(0)
  • 2020-12-13 02:48

    From the docs:

    If a callback function is provided, it is called with the arguments (error, stdout, stderr). On success, error will be null. On error, error will be an instance of Error. The error.code property will be the exit code of the child process while error.signal will be set to the signal that terminated the process. Any exit code other than 0 is considered to be an error.

    So:

    exec('...', function(error, stdout, stderr) {
      if (error) {
        console.log(error.code);
      }
    });
    

    Should work.

    0 讨论(0)
  • 2020-12-13 02:52

    Those 2 commands are running in separate shells.

    To get the code, you should be able to check err.code in your callback.

    If that doesn't work, you need to add an exit event handler

    e.g.

    dir = exec("ls -la", function(err, stdout, stderr) {
      if (err) {
        // should have err.code here?  
      }
      console.log(stdout);
    });
    
    dir.on('exit', function (code) {
      // exit code is code
    });
    
    0 讨论(0)
  • 2020-12-13 02:55

    In node documentation i found this information for the callback function:

    On success, error will be null. On error, error will be an instance of Error. The error.code property will be the exit code of the child process while error.signal will be set to the signal that terminated the process. Any exit code other than 0 is considered to be an error.

    0 讨论(0)
提交回复
热议问题