// Copyright (c) 2008 Ole Weidner // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include "saga-job.hpp" /////////////////////////////////////////////////////////////////////////////// void job_run (std::string service_url, std::string exe, std::vector argvec) { try{ // SAGA_GUARDED_EXEC // ( saga::url js_url(service_url); saga::job::description jd; jd.set_attribute (saga::job::attributes::description_executable, exe); jd.set_attribute (saga::job::attributes::description_interactive, saga::attributes::common_true); jd.set_vector_attribute (saga::job::attributes::description_arguments, argvec); saga::job::service js (js_url); saga::job::job job = js.create_job (jd); // create io streams for job io saga::job::ostream in; saga::job::istream out; saga::job::istream err; job.run (); in = job.get_stdin (); out = job.get_stdout (); err = job.get_stderr (); // get job state saga::job::state state = job.get_state (); if ( state != saga::job::Running && state != saga::job::Done ) { std::cerr << "run unexpectedly failed!" << std::endl; } while ( true ) { char buffer[1024*64]; // get stdout out.read (buffer, sizeof (buffer)); if ( out.gcount () > 0 ) { std::cout << std::string (buffer, out.gcount ()) << std::flush; } // get stderr err.read (buffer, sizeof (buffer)); if ( err.gcount () > 0 ) { std::cerr << std::string (buffer, err.gcount ()) << std::flush; } if ( out.fail () || err.fail () ) { break; } } } catch (saga::exception const & e) { std::cerr << e.what () << std::endl; } catch (std::exception const & e) { std::cerr << e.what () << std::endl; } catch (...) { std::cerr << std::endl; } // ) }