我正在尝试使用popen()
来捕获呼叫的stderr,但当然它似乎并没有这样做。有什么想法吗?
我的代码看起来或多或少像这样:
popen("nedit", "r");
但是我在屏幕上得到了关于非utf8的所有垃圾......
答案 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");