c popen не поймает stderr - PullRequest
       19

c popen не поймает stderr

22 голосов
/ 01 августа 2011

Я пытаюсь использовать popen() для перехвата stderr вызова, но, конечно, он этого не делает. Есть идеи?

Мой код выглядит примерно так:

popen("nedit", "r");

Но я получаю весь этот мусор о non-utf8 на моем экране ...

Ответы [ 2 ]

35 голосов
/ 01 августа 2011

popen дает вам дескриптор файла в stdout процесса, а не его stderr. Его первый аргумент интерпретируется как команда оболочки, поэтому вы можете выполнять в ней перенаправления:

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

или, если вы вообще не хотите использовать стандартный вывод,

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

(допустим также любой другой файл, кроме /dev/null.)

2 голосов
/ 01 августа 2011

Если вы хотите отменить все сообщения об ошибках, вы можете использовать:

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