如何在 Node.JS 中获取生成的 child_process 的输出?

How to get the output of a spawned child_process in Node.JS?

首先,我是一个完全的菜鸟,昨天开始使用Node.JS(这也是我多年来第一次使用Linux),所以请保持友好和明确

我目前正在制作一个 Node.JS 程序,它必须启动 shell 命令(主要是:挂载一个 USB 驱动器)。 我目前正在使用

var spawn = require('child_process').spawnSync;

function shspawn(command) {
    spawn('sh', ['-c', command], { stdio: 'inherit' });
}

shspawn('echo Hello world');
shspawn('mkdir newdir');

等这对我来说是一种非常舒适的方式。 问题是我想将 "ls" 命令的输出以

之类的方式存储在变量中
var result = shspawn('ls -l')

我已经在网上阅读了一些示例,但他们很少使用 spawn,即使他们使用了,它对我也不起作用(我想我可能做错了什么,但我还是 Node 的菜鸟)

如果你们有比使用 child_process_spawnSync 更好的想法,我愿意接受任何想法,但我希望尽可能长时间地保持我的程序无包:)

编辑:我需要它同步工作!这就是我开始使用 spawnSync 的原因。我将使用一些命令,如 dd,这需要时间并且需要在程序转到另一个命令之前完全完成。

你可以像下面那样做。

    var spawn = require('child_process').spawn;
    // Create a child process
    var child = spawn('ls' , ['-l']);

    child.stdout.on('data',
        function (data) {
            console.log('ls command output: ' + data);
        });
    child.stderr.on('data', function (data) {
        //throw errors
        console.log('stderr: ' + data);
    });

    child.on('close', function (code) {
        console.log('child process exited with code ' + code);
    });

更新:使用 spawnSync

    var spawn = require('child_process').spawnSync;
    var child = spawn('ls' , ['-l','/usr']);
    console.log('stdout here: \n' + child.stdout);