template run_process_output {
alias("_arg0") command;
var("true") not_finished;
value("") result;
backtrack_point() break;
If (not_finished) {
not_finished->set("false");
sys.start_process(command, "r", ["keep_stderr":"true"]) proc;
If (proc.is_error) {
break->go();
};
proc->read_pipe() read_pipe;
If (read_pipe.is_error) {
break->go();
};
backtrack_point() read_again;
read_pipe->read() read;
If (read.not_eof) {
result->append(read);
read_again->go();
};
break->go();
};
}
process main {
call("run_process_output", {{"/bin/echo", "HELLO"}}) run;
print(run.result);
}
dGVtcGxhdGUgcnVuX3Byb2Nlc3Nfb3V0cHV0IHsKICAgIGFsaWFzKCJfYXJnMCIpIGNvbW1hbmQ7CiAgICAKICAgIHZhcigidHJ1ZSIpIG5vdF9maW5pc2hlZDsKICAgIHZhbHVlKCIiKSByZXN1bHQ7CiAgICBiYWNrdHJhY2tfcG9pbnQoKSBicmVhazsKICAgIElmIChub3RfZmluaXNoZWQpIHsKICAgICAgICBub3RfZmluaXNoZWQtPnNldCgiZmFsc2UiKTsKICAgICAgICBzeXMuc3RhcnRfcHJvY2Vzcyhjb21tYW5kLCAiciIsIFsia2VlcF9zdGRlcnIiOiJ0cnVlIl0pIHByb2M7CiAgICAgICAgSWYgKHByb2MuaXNfZXJyb3IpIHsKICAgICAgICAgICAgYnJlYWstPmdvKCk7CiAgICAgICAgfTsKICAgICAgICBwcm9jLT5yZWFkX3BpcGUoKSByZWFkX3BpcGU7CiAgICAgICAgSWYgKHJlYWRfcGlwZS5pc19lcnJvcikgewogICAgICAgICAgICBicmVhay0+Z28oKTsKICAgICAgICB9OwogICAgICAgIGJhY2t0cmFja19wb2ludCgpIHJlYWRfYWdhaW47CiAgICAgICAgcmVhZF9waXBlLT5yZWFkKCkgcmVhZDsKICAgICAgICBJZiAocmVhZC5ub3RfZW9mKSB7CiAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlYWQpOwogICAgICAgICAgICByZWFkX2FnYWluLT5nbygpOwogICAgICAgIH07CiAgICAgICAgYnJlYWstPmdvKCk7CiAgICB9Owp9Cgpwcm9jZXNzIG1haW4gewogICAgY2FsbCgicnVuX3Byb2Nlc3Nfb3V0cHV0Iiwge3siL2Jpbi9lY2hvIiwgIkhFTExPIn19KSBydW47CiAgICBwcmludChydW4ucmVzdWx0KTsKfQo=