C ++将popen错误输出读入字符串

时间:2017-06-21 15:21:30

标签: c++

我正在通过posix popen()函数打开一个进程。例如。 git push,mkdir x等等。

我可以通过将这些命令存储到这样的缓冲区中来轻松读取这些命令的输出:

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {

FILE *in;
char buff[512];

if(!(in = popen("mkdir x", "r"))){
    return 1;
}

// fgets stores the output into buff
while(fgets(buff, sizeof(buff), in)!=NULL){
    cout << buff;
}
pclose(in);

return 0;

}

但是如果该过程出现错误,例如mkdir失败,然后我想将错误读入字符串或字符缓冲区。

但是,使用上面的代码,如果失败,则错误不会存储在缓冲区中。我认为这是因为错误被重定向到标准错误而不是标准输入。

如何修改上面的代码以获取bash /进程返回的错误消息?

1 个答案:

答案 0 :(得分:2)

您可以在popen方法调用中指定重定向:

popen("mkdir x 2>&1", "r")

然后,您就可以从缓冲区中读取错误消息。