我正在尝试编写能够使用另一个持续运行的进程的输出的代码。我曾尝试使用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);
}
}
答案 0 :(得分:1)
问题似乎是缓冲输出。
你需要告诉它不要缓冲它。即使用python程序,您可以使用-u
标志
python -u theprocess.py
或者您可以使用stdbuf
:
// 0 buffer
stdbuf -i0 -o0 -e0 command
// line buffer
stdbuf -oL -eL command