Node.js 节点:如何从child_process.spawn()流式传输STDERR内容?
我使用节点的child_process.spawn()运行shell命令,代码如下: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
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']);