好吧假設我有一個程序(在Windows的一個.exe文件),當我運行它,它輸出一些信息...現在我正在寫另一個程序(在C + + ),我需要它自動運行該.exe文件並讀取輸出,以便它可以處理該信息以進行進一步的操作...加載另一個命令行程序的輸出到我的
我該怎麼辦?
好吧假設我有一個程序(在Windows的一個.exe文件),當我運行它,它輸出一些信息...現在我正在寫另一個程序(在C + + ),我需要它自動運行該.exe文件並讀取輸出,以便它可以處理該信息以進行進一步的操作...加載另一個命令行程序的輸出到我的
我該怎麼辦?
使用popen
或在窗口(每條評論)_popen
。基本上,它的功能就像是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);
}
}
在Windows中,微軟已經黯然決定使用不規範名稱['_popen'](http://msdn.microsoft.com/en-us/library/96ayss4b%28v=vs.71%29.aspx)而不是'popen'。 –
你真棒! – morTie
的可能重複[搶程序的控制檯輸出(http://stackoverflow.com/questions/6633056/grab-programs-console-output) –