如何使用子进程承诺

How to use child-process-promise

var promise = require('child-process-promise').spawn;

promise('some_command_producing_output')
    .then(function (result) {
        ...
    })
    .catch(function (err) {
        ...
    });

我想要的是在命令在标准输出中产生输出后添加一些处理。所以最后我想创建一个像这样使用的函数:

RunCommandAndProcess('some_command_producing_output')
    .then(function (result) {
        ...
    })
    .catch(function (err) {
        ...
    });

该函数应该使用子进程承诺中的承诺,等待直到产生成功的结果并且return承诺处理数据。

你可以通过

var spawn = require('child-process-promise').spawn;
 
var promise = spawn('echo', ['hello']);
 
var childProcess = promise.childProcess;
 
console.log('[spawn] childProcess.pid: ', childProcess.pid);
childProcess.stdout.on('data', function (data) {
    console.log('[spawn] stdout: ', data.toString());
});
childProcess.stderr.on('data', function (data) {
    console.log('[spawn] stderr: ', data.toString());
});
 
promise.then(function () {
        console.log('[spawn] done!');
    })
    .catch(function (err) {
        console.error('[spawn] ERROR: ', err);
    });

更多信息请查看documentation

欢迎来到 Stack Overflow @ScHoolboy。

我建议您使用 Node.js 中的基本子进程模块,并按以下方式自行承诺

const spawn = require('child_process').spawn;

const spawnPromise = (cmd, args) => {
  return new Promise((resolve, reject) => {
    try {
      const runCommand = spawn(cmd, args);
      runCommand.stdout.on('data', data => resolve(data.toString()));
      runCommand.on('error', err => {
        throw new Error(err.message);
      });
    } catch (e) {
      reject(e);
    }
  });
};

其中:

  • cmd - 命令,例如“echo”
  • args:参数数组,例如["Hello world"]

如果需要,您可以将函数调用为 RunCommandAndProcess :)

用法示例:

spawnPromise('ls', ['-la']).then(data => console.log('data: ', data));

或者

const result = await spawnPromise('ls', ['-la']);