*/ private array $env = []; private ?string $output = null; /** * @param array $env */ public function __construct( array $env = [], int $timeoutMs = self::DEFAULT_EXECUTABLE_TIMEOUT_MILLIS, ) { if (!class_exists(Process::class)) { throw new RuntimeException(sprintf( 'The "symfony/process" package is required to use %s.', self::class )); } $this->env = $env; $this->timeoutMs = $timeoutMs; } /** * @param string $command * @return int */ public function __invoke(string $command): int { $process = Process::fromShellCommandline( $command, null, $this->env, null, ($this->timeoutMs / 1000) ); try { $process->run(); } catch (ProcessTimedOutException $e) { throw new ExecutableResponseError( 'The executable failed to finish within the timeout specified.', 'TIMEOUT_EXCEEDED' ); } $this->output = $process->getOutput() . $process->getErrorOutput(); return $process->getExitCode(); } public function getOutput(): ?string { return $this->output; } }