我上啓動子進程的應用工作使用Boost的C++程序庫 (http://www.highscore.de/boost/process0.5) 和重定向使用以下代碼將該過程標準化爲文件: boost::process::initializers::bind_stdout(boost::iostreams::file_descriptor_sink
go here )
如何捕獲標準輸出和打印到控制檯都和工藝運行時文件(C++/Boost.Process)
上述解決方案和代碼運行良好。
但是,現在,我需要能夠將子進程的標準輸出到文件和控制檯。
我已經找到低於該代碼似乎它應該做的工作:
#include <boost/process.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>
using namespace boost::process;
using namespace boost::process::initializers;
using namespace boost::iostreams;
int main()
{
boost::process::pipe p = create_pipe();
{
file_descriptor_sink sink(p.sink, close_handle);
execute(
run_exe("/bin/echo"),
set_cmd_line("echo hello"),
bind_stdout(sink)
);
}
file_descriptor_source source(p.source, close_handle);
stream<file_descriptor_source> is(source);
std::string s;
while (std::getline(is, s))
{
std::cout << s << std::endl;
//will write line by line to file here
}
}
我試圖運行上面的代碼,事實上我能夠輸出打印到控制檯和文件。 但上述代碼有一個主要問題(至少在我的情況下), while循環(while (std::getline(is, s))
)僅在被調用的進程退出後纔開始,這意味着在進程運行期間累積的所有輸出都被打印一旦過程完成,立即進行。現在
, 我需要的是能夠在它的運行擺脫被調用過程輸出和打印到控制檯和文件,因爲它涉及(而不是僅在最後) 。 (由於我啓動的進程超出了我的控制範圍,並且可能需要幾分鐘的時間才能運行,而且當前的屏幕控制檯只是空的,直到進程退出)。
我已經去了很多網站試圖找到這個解決方案,以及與代碼玩了很多,但我似乎無法找到解決方案。
這是如何實現的? (這是甚至可能與Boost.Process?) 我怎麼能夠使它的字符串/流填充的孩子過程中的標準出它的運行時,而不是隻有當它完成後?
'的std ::函數getline(S,是)'是一個錯字 – sehe 2014-10-17 21:44:39
右鍵,感謝。我相應地修復了原來的帖子。 – MichaelEr 2014-10-17 22:07:28