2011-08-01 68 views
16

私はpopen()を使用してコールの標準エラーを捕まえようとしていますが、もちろんそのようには見えません。何か案は?c popenはstderrをキャッチしません

私のコードは、多かれ少なかれ、次のようになります。

答えて

30

popenはあなたのファイルハンドルを与える...

popen("nedit", "r"); 

しかし、私は私の画面上で非UTF8に関するすべてのこのゴミを取得していますプロセス 'の標準出力ではなく標準出力です。あなたがそれにリダイレクトを行うことができますので、最初の引数は、シェルコマンドとして解釈されます

以外
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");