2011-08-01 105 views
16

我試圖使用popen()來捕捉調用的stderr,但當然它似乎沒有這樣做。有任何想法嗎?c popen不會捕捉stderr

我的代碼看起來或多或少是這樣的:

popen("nedit", "r"); 

但我發現了我的屏幕上非UTF8這一切的垃圾......

回答

30

popen讓你在一個文件句柄過程'stdout,而不是它的stderr。它的第一個參數被解釋爲一個shell命令,所以你可以在裏面做重定向:

FILE *p = popen("prog 2>&1", "r"); 

,或者,如果你不想在標準輸出的,

FILE *p = popen("prog 2>&1 >/dev/null", "r"); 

(任何其他文件除了/dev/null是可以接受的爲好)

+0

如果我們根本不需要輸出,我們不能做'popen(...,「w」);'而不是? –

1

如果你想拋棄所有錯誤信息,那麼你可以使用:

popen("nedit 2>/dev/null", "r");