使用另一个进程的连续输出

时间:2014-12-29 13:22:38

标签: c++

我正在尝试编写能够使用另一个持续运行的进程的输出的代码。我曾尝试使用http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/popen.html中的popen(),但它只适用于完成的进程。

该过程会监视我家中的某些内容,并在发生某些事情时将输出发送到终端。每次输出都发送时我想过滤它并在C ++中发生其他事情。有没有办法从持续运行的进程中获取输出?

编辑:

我使用popen()但我遇到了一个新问题。当我在代码中运行该过程时,通常它可以工作,但它必须与sudo一起运行。当它与sudo一起运行时,它不会进入while循环并且卡在fgets函数上。我用以下代码:

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

using namespace std;

int main() {

  FILE* fp;
  char line[255];
  fp = popen("sudo eibd --trace=5 --listen-local ip:", "r");

  while(fgets( line, sizeof line, fp) != NULL) {
    printf("aa");
    fflush(fp);
    printf("%s", line);
    }
}

1 个答案:

答案 0 :(得分:1)

问题似乎是缓冲输出。

你需要告诉它不要缓冲它。即使用python程序,您可以使用-u标志

运行它
python -u theprocess.py

或者您可以使用stdbuf

// 0 buffer
stdbuf -i0 -o0 -e0 command
// line buffer
stdbuf -oL -eL command