首页 > 解决方案 > NodeJS子进程标准输出没有完全返回

问题描述

我正在使用节点运行以下代码,当文件超过 12ko 左右时,我总是只得到大约 80% 的 stdout 应该返回的内容。如果文件是 240ko,它仍然会输出 80%。如果它低于 12 它将完全输出。

当我打开 cmd 并手动运行命令时,我总是得到完整的输出。

我尝试了 exec、execFile,我尝试增加最大缓冲区或更改编码,但这不是问题。我试图添加选项{shell: true, detached: true},但它是徒劳的,事实上,当我以分离的方式运行它时,它似乎运行得很好,因为它确实打开了一个实际的控制台,但是当进程完成时我无法检索标准输出。

const spawn = require('child_process').spawn;
const process = spawn(
    'C:\\Users\\jeanphilipped\\Desktop\\unrtf\\test\\unrtf.exe',
    ['--html' ,'C:\\Users\\jeanphilipped\\Desktop\\unrtf\\test\\tempaf45.rtf'],
);

let chunks = [];

process.stdout.on('data', function (msg) {
    chunks = [...chunks, ...msg];
});

process.on('exit', function (msg) {
   const buffer = Buffer.from(chunks);
   console.log(buffer.toString());
});

有什么线索吗?它似乎是 Node,因为当我手动运行它时,一切正常。

标签: node.jschild-process

解决方案


根据 nodejs 文档,所有 child_process 命令都是异步的。因此,当您尝试访问您的块变量时,不能保证您的命令已经完成,也许您的命令仍在处理中。因此建议您将整个 child_process 命令包装在 async/await 函数中。


推荐阅读