subprocess: subprocess (original) (raw)

cross platform subprocess library for c++ similar to design of python subprocess. See subprocess documentation for further documentation.

supports

Shakey elements

requirements

Integration

Adhoc

  1. copy files in src/cpp to your project.
  2. add the top folder as include.
  3. make sure cpp files are compiled.
  4. add #include <[subprocess.hpp](subprocess%5F8hpp.html)> to start using in source files.

Teaport

add this to your dependencies:

Todo add to cocoapods and perhaps others.

Examples

#include

#include

void simple() {

CompletedProcess process = subprocess::run({"echo", "hello", "world"},

RunBuilder().cout(PipeOption::pipe));

RunBuilder().cin("hello world\n"));

RunBuilder().cin("hello world").cout(PipeOption::pipe));

std::cout << "captured: " << process.cout << '\n';

RunBuilder().cerr(PipeOption::pipe)

.cout(PipeOption::pipe)

.check(true)

);

std::cout << "cerr was: " << process.cerr << "\n";

#if __cplusplus >= 202002L

.cout = PipeOption::pipe,

.check = false

});

std::cout << "captured: " << process.cout << '\n';

#endif

}

void popen_examples() {

.cout(PipeOption::pipe).popen();

char buf[1024] = {0};

std::cout << buf;

popen.close();

std::thread write_thread([&]() {

popen.close_cin();

});

for (auto& c : buf)

c = 0;

std::cout << buf;

popen.close();

if (write_thread.joinable())

write_thread.join();

}

int main(int argc, char** argv) {

std::cout << "running basic examples\n";

simple();

std::cout << "running popen_examples\n";

popen_examples();

return 0;

}

ssize_t pipe_read(PipeHandle, void *buffer, size_t size)

PipeOption

Definition basic_types.hpp:103

@ cout

Redirects to stdout.

CompletedProcess run(Popen &popen, bool check=false)

ssize_t pipe_write(PipeHandle, const void *buffer, size_t size)

Definition basic_types.hpp:164

std::string cerr

Definition basic_types.hpp:174

std::string cout

Definition basic_types.hpp:172

Definition ProcessBuilder.hpp:91

Definition ProcessBuilder.hpp:282

Popen popen()

Definition ProcessBuilder.hpp:323

RunBuilder & cout(const PipeVar &cout)

Definition ProcessBuilder.hpp:296

Deviations

current progress

All tests pass on linux & mac. Most pass under mingw & MSVC.

Changelog

0.5.0 2025-12-09

Breaking Changes

non-breaking Changes

0.4.0

0.3.0

0.2.0