gpt4 book ai didi

Child_process 没有捕获二进制文件输出?

转载 作者:搜寻专家 更新时间:2023-10-31 23:51:27 25 4
gpt4 key购买 nike

我在 Electron 项目中使用 npm 库“child_process”来捕获带有 spawn 的 C 程序的标准输出流。但是,当我尝试记录 child.stdout.on('data') 捕获的 'printf' 或 'fprintf' 的输出时,没有显示任何内容。这是我的测试代码:

#include <stdio.h>
#include <string.h>

int main(){
char buffer[256];
int i = 0;
while(1){
snprintf(buffer, sizeof(buffer), "echo %d\n", i);
printf("%s\n", buffer);
fprintf(stdout, "%s\n", buffer);
system(buffer);
system("sleep 1");
i++;
}
return 0;
}

我知道我的 javascript 是正确的,因为捕获了系统调用回显的行,并且我已经在 ruby​​ 脚本和 bash 脚本中使用类似的循环对其进行了测试,它们工作得很好。

当我在终端 shell 中运行二进制文件时,一切输出都很好,但是当我尝试使用 child.stdout.on 捕获所有三个输出时(第一行应该是“echo 0\n echo 0\n 0”) ('数据', (数据) => {...});就像我说的,我唯一得到的是来自系统调用的“0”。我对解决方案不知所措。

可能值得注意的是,当我在终端中运行此程序时,我无法使用 ^C 来终止它,因为它只是由标准输入获取并随输出一起显示在屏幕上。

如有必要,这是我的 javascript:

const { spawn }= require('child_process');
let test;

// Invoked by a button that when clicked calls ipcRenderer.send('test');
ipcMain.on('test', (event, ...args) => {
test = spawn('./a.out', []);
test.stdout.on('data', (data) => {
console.log(data);
});
});

最佳答案

printf()/fprintf() 默认缓冲其输出。您可以在调用 fprintf() 之后手动调用 fflush(stdout); 以强制将缓冲输出输出到 stdout 或者您可以禁用缓冲完全使用 setvbuf(stdout, NULL, _IONBF, 0);(这必须在任何输出到 stdout 的之前完成一次)。

关于Child_process 没有捕获二进制文件输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469200/

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