我想获得 shell 命令 (my_program) 的输出。这是取自 this 的示例网站:
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
FILE *in;
char buff[512];
if(!(in = popen("my_program", "r"))){
return 1;
}
while(fgets(buff, sizeof(buff), in)!=NULL){
cout << buff;
}
pclose(in);
return 0;
}
问题:
我想永久运行我的程序并在程序仍在运行时获取输出,而不仅仅是从程序中获取一次输出。
有什么想法吗?
最佳答案
你的问题有点不清楚,但我怀疑问题出在缓冲区和答案刷新:我的理解是程序my_program
偶尔会产生输出,您显示的程序应该在 my_program
时开始运行打印一些东西。此外,我怀疑这个程序总共不会产生很多输出,例如小于 4k。
问题是大多数实现缓冲标准输出的方式不同,这取决于它是定向到“控制台”还是其他东西:当写入控制台时,输出往往是行缓冲区,而其他目的地缓冲大得多的缓冲区。但是,可以显式刷新缓冲区,从而大大降低输出的性能。当然,在上面的场景中,您更感兴趣的是及时输出而不是输出性能。
在 C++ 中刷新输出缓冲区的简单方法我们使用 out << std::flush
.如果你想快速验证这个问题,你可以使用 out << std::unitbuf
将流设置为在每次输出操作后刷新。 .还有许多其他方法可以自动刷新,但这些方法涉及更多。
关于c++ - 从在 C++ 中运行的 shell 命令永久获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855312/