gpt4 book ai didi

javascript - fs.openSync 在将 stdout 写入文件时添加额外的换行符

转载 作者:行者123 更新时间:2023-12-02 23:22:01 24 4
gpt4 key购买 nike

我有一个进程启动另一个进程并将其输出写入文件 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$/, '')))

我认为这不是删除这些额外换行符的好方法。我可以做些什么来摆脱它们吗?

最佳答案

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

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

  1. 确保服务器进程在发送之前删除换行符
  2. 在打印到控制台之前去除 Node 进程中的换行符。
  3. 使用process.stdout.write() ,它写入进程的标准输出,不带换行符。

关于javascript - fs.openSync 在将 stdout 写入文件时添加额外的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56907836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com