$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] [boost.process] 0.6 Redesign
From: Klemens Morgenstern (klemens.morgenstern_at_[hidden])
Date: 2016-04-18 11:35:23
Hi,
I am currently working on a new version (0.6) of boost.process which
mainly provides a new interface. Most of the underlying features have be
derived from the older boost.process version. By doing all this, I tried
to hide basically all platform-specifics, so that no #ifdefs are
required as in 0.5.
It is somewhat inspired by python and std::thread.
I really hope this can help to make boost.process an official library.
At the current state, I have all functionality in the library that I
want, but it's not polished at all. Also it of course needs more tests
and documentation. But I think it sufficient to get the basic idea.
You can check it out here:
https://github.com/klemens-morgenstern/boost-process/tree/develop
And the little documentation it has is found here:
http://klemens-morgenstern.github.io/process/
Additionally here are the development notes:
https://github.com/klemens-morgenstern/boost-process/issues/2
At the current state, the tests pass on linux as well as windows (gcc-5
& MSVC-14). Requirements are C++, boost.fusion, boost.asio,
boost.iostreams, boost.filesystem and boost.system.
I really could use some feedback and hope you're interested.
Sincerely,
Klemens
Here's some sample code:
child c = execute("program", "param1", std_err > "error.log");
And to show off a little: Or you can modify the environment read the
output into a future, write the input via pipe and redirect stderr to null.
std::future<std::string> fut;
process::pipe p;
asio::io_service io_service;
auto c = execute("other-prog",
std_out > fut,
std_in < p;
std_err > null;
env["PATH"]+="/tmp",
env["BOOST_VERSION"]="1.61",
io_service);
iostreams::streams<iostreams::file_descriptor_sink> str(p.sink());
The child class binds the subprocess analogue to an std::thread, i.e. it
will wait for the process to finished. It can be detached, terminated
and waited for.