Node.js 节点:如何从child_process.spawn()流式传输STDERR内容?

Node.js 节点:如何从child_process.spawn()流式传输STDERR内容?,node.js,child-process,stderr,stdio,spawn,Node.js,Child Process,Stderr,Stdio,Spawn,我使用节点的child_process.spawn()运行shell命令,代码如下: const process = require('child_process').spawn('whoami'); // this works... process.stdout.on('data', function(buf) { console.log('HERE IS SOME STDOUT CONTENT "%s"', String(buf)); }); // this never work

我使用节点的child_process.spawn()运行shell命令,代码如下:

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

// this works...
process.stdout.on('data', function(buf) {
    console.log('HERE IS SOME STDOUT CONTENT "%s"', String(buf));
});

// this never works...
process.stderr.on('data', function(buf) {
    console.log('HERE IS SOME STDERR CONTENT "%s"', String(buf));
});

// this works, but doesn't let me stream STDERR content...
process.on('error', (err) => {
    console.log('there was an error: ' + err);
});
运行上述有效命令
whoami
可以读取传递给
process.STDOUT.on
的函数中的STDOUT数据

如果我将命令更改为无效的内容(生成一些STDERR内容),如

whoami
命令将错误消息输出到STDERR(在普通shell中),但在
进程内的节点my函数中,
上的STDERR.on永远不会执行。”。我从来没有看到过
这里有一些STDERR内容
消息


我还尝试了其他一些无效的shell命令,如
cd folderthat doesntextist
ls filename that doesntextist
,它们都应该生成STDERR内容

在键入我的问题之后,我发现这很简单,因为在.spawn()的第一个参数中不能有空格。。。您必须将命令的其余部分作为带有数组的第二个参数传入,即

const process = require('child_process').spawn('whoami', ['BADARGUMENTTOBREAKTHINGS']);
这是意外的,因为.exec()和.spawnSync()都使用第一个参数中的空格

希望这能帮助其他人在将来有同样的问题

const process = require('child_process').spawn('whoami', ['BADARGUMENTTOBREAKTHINGS']);