電子プロジェクトでnpmライブラリ 'child_process'を使用して、Cプログラムから標準出力のストリームを取得して生成します。しかし、child.stdout.on( 'data')によって取得された 'printf'または 'fprintf'の出力をログに記録しようとすると、何も表示されません。これは私のテストコードです:Child_processはバイナリファイル出力をキャプチャしていませんか?
#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;
}
私はシステムコールによってecho'ed行がキャプチャーされ、私はRubyスクリプトとbashスクリプトに似たループでそれをテストしているので、私のjavascriptのが正しいことを知っていて、彼らはうまくいった。
ターミナルシェルでバイナリファイルを実行すると、すべてがうまく出力されますが、child.stdoutを使用して3つの出力(最初の行は "echo 0 \ n echo 0 \ n 0")をキャプチャしようとします。 on( 'data'、(data)=> {...});私が返すのは、私が言ったように、システムコールからの "0"だけです。私は解決策を失っている。
このプログラムをターミナルで実行すると、^ Cを使用して終了することはできません。これはstdinによってピックアップされ、出力とともに画面を運びます。必要であれば、ここで
は私の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);
});
});
Cプログラムで 'fflush(stdout);を呼び出すか、stdoutバッファリングを無効にしましたか? – mscdex
@mscdexそれはトリックでした。あなたはこの背後にある論理を知っていますか? –