在 NodeJS 中捕获 child_process 的 *complete* 输出流
Capturing the *complete* output stream of a child_process in NodeJS
一段时间以来,我一直在尝试捕获 child_process 的输出。下面的代码示例是我目前的尝试。
代码:
// Spawning a shell
var terminal = require('child_process').spawn(`sh`, [], { stdio: [ 'inherit', 'pipe', 'inherit'] });
console.log("Shell spawned!");
terminal.stdout.on('data', (data) => {
console.log(`Received chunk ${data}`);
});
输出:
Shell spawned!
预期输出:
Shell spawned!
$
当在 stdout 选项上使用 'inherit' 而不是 'pipe' 时,我得到了预期的输出。但是因为我需要捕获 process/shell 的输出,所以 'inherit' 对我没有用。我现在的问题是,如何捕获进程的标准输出流的全部输出以及 'inherit' 到底在做什么?我试图在使用 'inherit' 后捕获 process.stdout - 显然没有运气。
无法显示来自子进程 shell 的提示,因为 bash(我假设其他 shell)不会将提示输出到标准输出。有关详细信息,请参阅 this post。
您可以通过写入标准输出而不是 console.log() 来模拟它。
const term = require('child_process')
.spawn('sh', [], { stdio: [ 'inherit', 'pipe', 'pipe'] });
process.stdout.write('$ ');
term.stdout.on('data', (data) => {
process.stdout.write(`\n${data}$ `);
});
term.stderr.on('data', (data) => {
process.stderr.write(`\n${data}$ `);
});
一段时间以来,我一直在尝试捕获 child_process 的输出。下面的代码示例是我目前的尝试。
代码:
// Spawning a shell
var terminal = require('child_process').spawn(`sh`, [], { stdio: [ 'inherit', 'pipe', 'inherit'] });
console.log("Shell spawned!");
terminal.stdout.on('data', (data) => {
console.log(`Received chunk ${data}`);
});
输出:
Shell spawned!
预期输出:
Shell spawned!
$
当在 stdout 选项上使用 'inherit' 而不是 'pipe' 时,我得到了预期的输出。但是因为我需要捕获 process/shell 的输出,所以 'inherit' 对我没有用。我现在的问题是,如何捕获进程的标准输出流的全部输出以及 'inherit' 到底在做什么?我试图在使用 'inherit' 后捕获 process.stdout - 显然没有运气。
无法显示来自子进程 shell 的提示,因为 bash(我假设其他 shell)不会将提示输出到标准输出。有关详细信息,请参阅 this post。
您可以通过写入标准输出而不是 console.log() 来模拟它。
const term = require('child_process')
.spawn('sh', [], { stdio: [ 'inherit', 'pipe', 'pipe'] });
process.stdout.write('$ ');
term.stdout.on('data', (data) => {
process.stdout.write(`\n${data}$ `);
});
term.stderr.on('data', (data) => {
process.stderr.write(`\n${data}$ `);
});