如何拦截 node.js 中命令的输出流并将其保存到变量?

How to intercept and save to a variable the output streaming of a command in node.js?

我有这个脚本可以正确地 运行 同步 ls 命令并将结果输出到终端。如何截取结果并将其保存到变量中?

const cp = require('child_process');
const result = cp.spawnSync(
    'ls',
    ['-l', '/usr'],
    { stdio: [process.stdin, process.stdout, process.stdout] }
);

如果我按照

的建议尝试这个
result.stdout.on('data', function (chunk) {
    console.log(chunk);
});

我明白了

result.stdout.on('data', function (chunk) {
              ^
TypeError: Cannot read property 'on' of null

区别在于 spawnSync 而不是 spawn

通过查看 docs 我们可以看到 spawnSync returns 的结果包含一个名为 stdout 的键的对象,它是一个 Buffer.您不必监听事件,因为您正在调用 spawn 的同步版本 - 进程将等待命令完成执行后再继续,然后 returns 结果。

所以在你的情况下,你的 ls -l /usr 命令的结果可以用 result.stdout.toString() 读取。您还需要在选项中保留 stdio 的默认配置。