[英]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.