【问题标题】:c popen won't catch stderrc popen 不会捕获 stderr
【发布时间】:2011-10-17 13:15:51
【问题描述】:

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

我的代码或多或少是这样的:

popen("nedit", "r");

但是我的屏幕上出现了所有关于非 utf8 的垃圾信息...

【问题讨论】:

    标签: c popen stderr


    【解决方案1】:

    popen 为您提供进程标准输出的文件句柄,而不是它的标准错误。它的第一个参数被解释为一个 shell 命令,所以你可以在其中做重定向:

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

    或者,如果您根本不需要标准输出,

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

    (除了/dev/null 之外的任何其他文件也是可以接受的。)

    【讨论】:

    • 如果我们根本不想要输出,我们不能用popen(..., "w"); 代替吗?
    【解决方案2】:

    如果你想丢弃所有的错误信息,那么你可以使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      相关资源
      最近更新 更多