2011-08-01 21 views
16

Estoy tratando de usar popen() para capturar el stderr de una llamada, pero por supuesto no parece estar haciendo eso. ¿Algunas ideas?c popen no detectará stderr

Mi código es más o menos así:

popen("nedit", "r"); 

Pero me estoy poniendo toda esta basura acerca de la no-UTF8 en mi pantalla ...

Respuesta

30

popen le da un identificador de archivo en una proceso 'stdout, no es stderr. Su primer argumento se interpreta como un comando shell, por lo que puede hacer cambios de dirección en ella:

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

o, si no desea que la salida estándar en todos,

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

(además de cualquier otro archivo /dev/null es aceptable también)

+0

Si no queremos el resultado, ¿no podríamos hacer 'popen (...," w ");' en su lugar? –

1

Si desea descartar todos los mensajes de error, entonces se puede utilizar:.

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