好的,假设我有一个程序(在 Windows 中是一个 .exe 文件),当我运行它时,它会输出一些信息......现在我正在编写另一个程序(在 c++ 中),我需要它来自动运行那个 .exe 文件和阅读输出,以便它可以处理该信息以进行进一步的操作...
我该怎么办 ?
好的,假设我有一个程序(在 Windows 中是一个 .exe 文件),当我运行它时,它会输出一些信息......现在我正在编写另一个程序(在 c++ 中),我需要它来自动运行那个 .exe 文件和阅读输出,以便它可以处理该信息以进行进一步的操作...
我该怎么办 ?
在 Windows 上使用popen
或(根据评论)_popen
。基本上它作为 in 背后的东西|
起作用some program | thing
。
通常我反对发布完整的代码,但我今天确实写了这个并且手头有它,所以,给你。据我了解,C++ 没有一个很好的替代接口,popen
但是如果你在那个层引入了 boost 库或其他东西,那么就有解决方案。
注意我使用char[10]
是因为在我的应用程序中我知道输出会很短。
PopenWrapper(const std::string& command) {
fd = popen(command.c_str(), "r");
if(fd == NULL) {
throw PopenException("Failed to open command: " + command);
}
}
std::string get() {
char line[10];
fgets(line, sizeof(line), fd);
return std::string(line);
}
~PopenWrapper() {
if(fd != NULL) {
pclose(fd);
}
}