Javascript fs.openSync在将标准输出写入文件时添加额外的换行符
我有一个进程启动另一个进程并将其输出写入文件Javascript fs.openSync在将标准输出写入文件时添加额外的换行符,javascript,node.js,Javascript,Node.js,我有一个进程启动另一个进程并将其输出写入文件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,
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
我得到如下输出:
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$/, '')))
我觉得这不是删除这些额外换行的好方法。我可以做些什么来摆脱它们吗?
控制台。log
/error
将始终在其输出的末尾添加一个换行符。我猜想,无论您从服务器进程接收到什么值,都已经有了一条新线
因此,我可以看到三种可能的解决方案:
使用
process.stdout.write()
就可以了!