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

Я пытаюсь использовать popen(), чтобы поймать stderr вызова, но, похоже, это не так. Любые идеи?

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

popen("nedit", "r");

Но у меня на экране вся эта фигня про не-utf8...


person poy    schedule 01.08.2011    source источник


Ответы (2)


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

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

или, если вам вообще не нужен стандартный вывод,

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

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

person Fred Foo    schedule 01.08.2011
comment
Если нам вообще не нужен вывод, не могли бы мы вместо этого сделать popen(..., "w");? - person Alexis Wilke; 16.07.2016

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

popen("nedit 2>/dev/null", "r");
person qbert220    schedule 01.08.2011