42 lines
991 B
Plaintext
42 lines
991 B
Plaintext
include_guard "run_process_output"
|
|
|
|
template run_process_output {
|
|
alias(@_arg0) command;
|
|
|
|
# We collect the results here.
|
|
var(@false) succeeded;
|
|
value("") output;
|
|
|
|
Do {
|
|
# Start child process.
|
|
sys.start_process(command, "r", ["keep_stderr":"true"]) proc;
|
|
If (proc.is_error) {
|
|
_do->break();
|
|
};
|
|
|
|
# Get read pipe handle.
|
|
proc->read_pipe() read_pipe;
|
|
If (read_pipe.is_error) {
|
|
_do->break();
|
|
};
|
|
|
|
# Read all contents.
|
|
backtrack_point() read_again;
|
|
read_pipe->read() read;
|
|
If (read.not_eof) {
|
|
output->append(read);
|
|
read_again->go();
|
|
};
|
|
|
|
# Wait for the process to terminate.
|
|
proc->wait() wait;
|
|
val_different(wait.exit_status, "0") not_ok;
|
|
If (not_ok) {
|
|
_do->break();
|
|
};
|
|
|
|
# Assume success.
|
|
succeeded->set(@true);
|
|
};
|
|
}
|