/** * Promise that resolves once child process exits * * @param LoopInterface $loop ReactPHP event loop. * @param Process $process Child Process to run. * * @return \React\Promise\PromiseInterface */ function childProcessPromise(LoopInterface $loop, Process $process) { $deferred = new Deferred(); $buffers = ['stderr' => '', 'stdout' => '']; $process->on('exit', function ($exitCode) use($deferred, &$buffers) { $deferred->resolve(new ProcessOutcome($exitCode, $buffers['stderr'], $buffers['stdout'])); }); \WyriHaximus\React\futurePromise($loop, $process)->then(function (Process $process) use($loop, &$buffers) { $process->start($loop); $process->stderr->on('data', function ($output) use(&$buffers) { $buffers['stderr'] .= $output; }); $process->stdout->on('data', function ($output) use(&$buffers) { $buffers['stdout'] .= $output; }); }); return $deferred->promise(); }
/** * @return PromiseInterface */ public function execute($program = '') { if ($program === '') { return new RejectedPromise(); } $deferred = new Deferred(); $process = new Process('exec hash ' . $program); $process->on('exit', function ($exitCode) use($deferred) { if ($exitCode == 0) { $deferred->resolve(); return; } $deferred->reject(); }); \WyriHaximus\React\futurePromise($this->loop, $process)->then(function (Process $process) { $process->start($this->loop); }); return $deferred->promise(); }
/** * @return PromiseInterface */ public function execute() { $deferred = new Deferred(); $buffer = ''; $process = new Process('exec nproc'); $process->on('exit', function ($exitCode) use($deferred, &$buffer) { if ($exitCode == 0) { $deferred->resolve($buffer); return; } $deferred->reject(); }); \WyriHaximus\React\futurePromise($this->loop, $process)->then(function (Process $process) use(&$buffer) { $process->start($this->loop); $process->stdout->on('data', function ($output) use(&$buffer) { $buffer += $output; }); }); return $deferred->promise(); }