child_process.stdout.on('data', cb) 将日志分组为一个事件
child_process.stdout.on('data', cb) groups logs into one event
这只是一个演示,不是我的真实代码。如果需要,我可以附上我的真实代码。
我有一个 scriptA,它通过以下方式输出日志:process.stdout.write
.
然后我想从父 scriptB 获取每个日志:
const cp = child_process.spawn('node', ['scriptA.js']);
cp.stdout.on('data', (data) => {
console.log(data.toString() + '\n');
});
应该输出:
line a
line b
line c
但是它是把几行连成一行(如果短时间内输出):
line a
line b
line c
我尝试在 child_process 中使用超时,但当然它只会延迟它们。我也尝试过使用随机超时,但这也没有用,因为它只是弄乱了日志的顺序。
有人知道是否有任何方法可以解决这个问题吗?
编辑:
我只是想在父级中拆分日志,如果存在多个日志,则按行分派日志:
cp.stdout.on('data', (data) => {
let logs = data.toString().split('\n').filter(x => x);
logs.forEach(el => {
console.log(`${el}\n\n`)
});
});
这是我想要的,但我认为这不是最好的方法。
任何建议都有帮助!
您可以使用标准库中的 readline
模块来执行此操作。
const readline = require('readline');
const child_process = require('child_process');
const cp = child_process.spawn('node', ['scriptA.js']);
const reader = readline.createInterface({ input: cp.stdout })
reader.on('line', (line) => {
console.log(line);
});
有一个选项 crlfDelay
您可能需要对其进行调整,该选项记录在 readline.createInterface()
中
这只是一个演示,不是我的真实代码。如果需要,我可以附上我的真实代码。
我有一个 scriptA,它通过以下方式输出日志:process.stdout.write
.
然后我想从父 scriptB 获取每个日志:
const cp = child_process.spawn('node', ['scriptA.js']);
cp.stdout.on('data', (data) => {
console.log(data.toString() + '\n');
});
应该输出:
line a
line b
line c
但是它是把几行连成一行(如果短时间内输出):
line a
line b
line c
我尝试在 child_process 中使用超时,但当然它只会延迟它们。我也尝试过使用随机超时,但这也没有用,因为它只是弄乱了日志的顺序。
有人知道是否有任何方法可以解决这个问题吗?
编辑: 我只是想在父级中拆分日志,如果存在多个日志,则按行分派日志:
cp.stdout.on('data', (data) => {
let logs = data.toString().split('\n').filter(x => x);
logs.forEach(el => {
console.log(`${el}\n\n`)
});
});
这是我想要的,但我认为这不是最好的方法。 任何建议都有帮助!
您可以使用标准库中的 readline
模块来执行此操作。
const readline = require('readline');
const child_process = require('child_process');
const cp = child_process.spawn('node', ['scriptA.js']);
const reader = readline.createInterface({ input: cp.stdout })
reader.on('line', (line) => {
console.log(line);
});
有一个选项 crlfDelay
您可能需要对其进行调整,该选项记录在 readline.createInterface()