当我使用这个简单的程序来获取进程的标准输出时,我也以某种方式得到了进程的标准错误,尽管popen
的手册页说只有标准输出被重定向。这是否可能与使用popen
分支进程时使用的shell相关? errEr
是一个输出到stderr
(cerr << "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;
}
答案 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;
}