我有一个进程可以启动另一个进程,并将其输出写入文件out.log
let out = fs.openSync(path.join(process.cwd(), './out.log'), 'a')
let err = fs.openSync(path.join(process.cwd(), './out.log'), 'a')
let child = cp.spawn('node', [path.join(__dirname, '../../server')], { detached: true, stdio: ['ignore', out, err, 'ignore'] })
child.unref()
然后开始执行上面的操作,这又产生了一个,这是输出的来源:
server = cp.spawn('node', [path.join(process.cwd(), 'index.js')], { windowsHide: true })
server.stdout && server.stdout.on('data', chunk => console.log(chunk.toString()))
server.stderr && server.stderr.on('data', chunk => console.error(chunk.toString()))
上面的方法可以将输出写入输出文件,但是,它会在文件中添加额外的换行符,而不是像这样的输出:
line 1
line 2
line 3
我得到这样的输出:
line 1
line 2
line 3
要使多余的换行符消失,我需要将stdout: 'data'
事件更改为使用替换:
server.stdout && server.stdout.on('data', chunk =>
console.log(chunk.toString().replace(/\n$/, '')))
我认为这不是删除这些多余的换行符的好方法。我有什么办法可以摆脱它们?
答案 0 :(得分:1)
console.log
/ errror
将始终在其输出末尾添加换行符。我猜您从服务器进程收到的任何值都已经有换行符。
因此,我可以看到三种可能的解决方案:
process.stdout.write()
,它不使用换行符即可写入流程的标准输出。