gpt4 book ai didi

JavaScript 无法一次接收一行子流

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:02 25 4
gpt4 key购买 nike

在 Node 中使用 child_process.spawn 时,它会生成一个子进程并自动创建 stdin、stdout 和 stderr 流来与子进程交互。

const child = require('child_process');
const subProcess = child.spawn("python", ["myPythonScript.py"])

subProcess.stdout.on('data', function(data) {
console.log('stdout: ' + data);
});

因此,我在我的项目中实现了这一点,但问题是,只有当缓冲区达到一定大小时,子进程才会实际写入输出流。当缓冲区设置有数据时则不会(无论数据大小如何)。事实上,我希望在子进程输出流写入输出流时直接接收子进程输出流,而不是在它填充整个缓冲区时接收子进程输出流。有什么解决办法吗?

编辑:正如 t.888 所指出的,它实际上应该按我的预期工作。如果我生成另一个子进程,它实际上会发生。这次是c++。但我不知道为什么当我生成 python 脚本时它不起作用。实际上,Python 脚本仅通过 stdout 发送大块消息(可能是在缓冲区已满时)

最佳答案

我认为你需要readline

const fs = require('fs');
const readline = require('readline');

async function processLineByLine() {
const fileStream = fs.createReadStream('input.txt');

const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
// Note: we use the crlfDelay option to recognize all instances of CR LF
// ('\r\n') in input.txt as a single line break.

for await (const line of rl) {
// Each line in input.txt will be successively available here as `line`.
console.log(`Line from file: ${line}`);
}
}

processLineByLine();

来自https://nodejs.org/api/readline.html#readline_example_read_file_stream_line_by_line

关于JavaScript 无法一次接收一行子流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60005551/

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