15#ifndef B2SUBPROCESS_H_
16#define B2SUBPROCESS_H_
26class Subprocess :
public std::ostringstream {
29 const std::string& out =
"cout",
const std::string& err =
"cerr",
30 bool raise_exception_on_error =
false) {
31 std::string s = str();
45 returncode = ::system(s.c_str());
46 if (WIFSIGNALED(returncode) || (WEXITSTATUS(returncode) && raise_exception_on_error)) {
47 Exception() << get_error() <<
THROW;
49 return WEXITSTATUS(returncode);
52 std::string get_error()
const {
53 std::ostringstream res;
54 if (WIFSIGNALED(returncode)) {
55 res <<
"Command " << str() <<
" killed by signal " << WTERMSIG(returncode);
56 }
else if (WEXITSTATUS(returncode) > 0) {
57 res <<
"Command " << str() <<
" terminates with nonzero exit status "
58 << WEXITSTATUS(returncode);
#define THROW
Definition b2exception.H:198
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32