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