【发布时间】:2011-10-17 13:15:51
【问题描述】:
我正在尝试使用 popen() 来捕获呼叫的 stderr,但当然它似乎没有这样做。有什么想法吗?
我的代码或多或少是这样的:
popen("nedit", "r");
但是我的屏幕上出现了所有关于非 utf8 的垃圾信息...
【问题讨论】:
我正在尝试使用 popen() 来捕获呼叫的 stderr,但当然它似乎没有这样做。有什么想法吗?
我的代码或多或少是这样的:
popen("nedit", "r");
但是我的屏幕上出现了所有关于非 utf8 的垃圾信息...
【问题讨论】:
popen 为您提供进程标准输出的文件句柄,而不是它的标准错误。它的第一个参数被解释为一个 shell 命令,所以你可以在其中做重定向:
FILE *p = popen("prog 2>&1", "r");
或者,如果您根本不需要标准输出,
FILE *p = popen("prog 2>&1 >/dev/null", "r");
(除了/dev/null 之外的任何其他文件也是可以接受的。)
【讨论】:
popen(..., "w"); 代替吗?
如果你想丢弃所有的错误信息,那么你可以使用:
popen("nedit 2>/dev/null", "r");
【讨论】: