在C ++ linux中使用popen时的stderr输出

时间:2015-04-01 12:07:35

标签: c++ linux stderr

当我使用这个简单的程序来获取进程的标准输出时,我也以某种方式得到了进程的标准错误,尽管popen的手册页说只有标准输出被重定向。这是否可能与使用popen分支进程时使用的shell相关? errEr是一个输出到stderrcerr << "hello";)的简单程序。我使用的是RHEL 6.4。谢谢!

#include <iostream>
#include <cstdio>

using namespace std;

int main ()
{
    FILE *fd = popen("errWr", "r");
    char str [1024];
    while (fgets(str, 1024, fd))
    {
        cout<<str<<endl;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您未使用stderr在程序中获得popen的输出。

按照简单的示例显示,来自已启动应用程序的错误流将打印在终端中,而不会在您的程序中读取。 popen仅重定向stdout流,stderr流不会受到影响,因此只会将其打印到终端。

#include <iostream>
#include <cstdio>

using namespace std;

int main ()
{
    FILE *fd = popen("errWr", "r");
    char str [1024];
    while (fgets(str, 1024, fd))
    {
        cout << "=>" << str << "<=" << endl;
    }
    return 0;
}