public function run($commandline, callable $callback = null, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60)
    {
        $process = new Process(
            $commandline,
            $cwd,
            $env,
            $input,
            $timeout
        );

        $helper = new DebugFormatterHelper();
        $output = $this->output;
        $output->writeln($helper->start(
            spl_object_hash($process),
            'Executing: '.$commandline,
            'STARTED'
        ));
        $process->run(function ($type, $buffer) use ($helper,$output,$process,$callback) {
            if (is_callable($callback)) {
                call_user_func($callback, $type, $buffer);
            }
            $contents = $helper->progress(
                spl_object_hash($process),
                $buffer,
                Process::ERR === $type
            );
            $output->write($contents);
        });

        return $process;
    }