c popen不会抓住stderr

时间:2011-08-01 15:16:55

标签: c popen stderr

我正在尝试使用popen()来捕获呼叫的stderr,但当然它似乎并没有这样做。有什么想法吗?

我的代码看起来或多或少像这样:

popen("nedit", "r");

但是我在屏幕上得到了关于非utf8的所有垃圾......

2 个答案:

答案 0 :(得分:34)

popen为进程'stdout提供文件句柄,而不是stderr。它的第一个参数被解释为shell命令,因此你可以在其中进行重定向:

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

或者,如果你根本不想要stdout,

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

/dev/null以外的任何其他文件也可以接受。)

答案 1 :(得分:2)

如果要丢弃所有错误消息,则可以使用:

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