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()
    就可以了!