fs.openSync在将标准输出写入文件时添加额外的换行符

时间:2019-07-05 18:33:11

标签: 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, 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$/, '')))

我认为这不是删除这些多余的换行符的好方法。我有什么办法可以摆脱它们?

1 个答案:

答案 0 :(得分:1)

console.log / errror将始终在其输出末尾添加换行符。我猜您从服务器进程收到的任何值都已经有换行符。

因此,我可以看到三种可能的解决方案:

  1. 确保服务器进程在发送前剥离换行符
  2. 在打印到控制台之前,先在节点进程中添加换行符。
  3. 使用process.stdout.write(),它不使用换行符即可写入流程的标准输出。