簡體   English   中英

C編譯二進制文件的Nodejs exec在stdout上顯示stderr嗎?

[英]Nodejs exec for a C compiled binary displays stderr on stdout?

我基本上有一個C編譯的二進制文件,其中如果在執行過程中遇到錯誤,則將錯誤轉儲到stderr。 這個C二進制文件被NodeJS包裹着,在二進制文件中,它是通過子進程exec調用的。 但是一旦出錯,即使C代碼將信息轉儲到stderr,我仍然似乎在stdout而不是stderr上的Nodejs中獲取信息。 因此,基本上運行console.log(stdout); 轉儲錯誤信息,但console.log(stderr); 不傾倒任何東西。 有沒有人對此有任何想法,如果我需要通過其他媒介重定向此信息,以便在NodeJS腳本上獲得有關stdout和stderr的適當信息?

我創建了代碼的測試版本,它似乎可以在stderr和stdout上正確顯示信息:

#include <stdio.h>
int main(){
 fprintf(stderr, "Whoops, this is stderr");
 fprintf(stdout, "Whoops, this is stdout");
 return 0;
}

以及相應的NodeJS代碼:

#!/usr/bin/env node
var exec = require('child_process').exec,
    path = require('path');
var bin = path.join(__dirname, 'a.out');
var proc = exec(bin, function (error, stdout, stderr) {
           console.log('stdout:', stdout);
           console.log('stderr:', stderr);
    });
proc.stdout.on('data', function (dat) { console.log(dat) });

這是我得到的輸出:

Whoops, this is stdout
stdout: Whoops, this is stdout
stderr: Whoops, this is stderr

不知道為什么在我的代碼中會發生這種情況,可能是因為我正在同時將大量信息轉儲到stdout和stderr,或者我包含的一些錯誤模塊可能導致這種情況發生。 實際的代碼要寫在這​​里很大,但是似乎我必須研究它可能在哪里出錯。

我似乎已經知道了問題所在。 轉儲信息的舊式C代碼從未引用傳遞給它的FILE *。 這就是所有信息都出現在stdout而不是stderr上的原因。 修復了API以FILE *作為參數並轉儲信息以更正FILE指針的問題,現在它可以工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM