2011-08-01 10 views
16

Próbuję użyć popen(), aby złapać stderr połączenia, ale oczywiście nie wydaje się, aby to zrobić. Jakieś pomysły?c Popen nie złapie stderr

Mój kod wygląda mniej więcej tak:

popen("nedit", "r"); 

Ale Dostaję wszystkie śmieci o non-utf8 na moim ekranie ...

Odpowiedz

30

popen daje uchwyt pliku na przetwarzać "stdout", a nie "stderr". Jej pierwszym argumentem jest interpretowane jako polecenia powłoki, dzięki czemu można zrobić przekierowania w nim:

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

lub, jeśli nie chcesz stdout w ogóle,

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

(dowolny inny plik oprócz /dev/null jest dopuszczalne również)

+0

Jeśli w ogóle nie chcemy mieć wyjścia, czy nie możemy zrobić 'popen (...," w ");' zamiast? –

1

Jeśli chcesz usunąć wszystkie komunikaty o błędach, a następnie można użyć:.

popen("nedit 2>/dev/null", "r"); 
Powiązane problemy