Как сохранить / перенаправить вывод команды Laravel Artisan?

Я использую Artisan::call() на одном из моих маршрутов и хочу сохранить вывод команды в переменную.

Есть ли способ захватить STDOUT и STDERR, созданные командой artisan?

Это способ:

 use Symfony\Component\Console\Output\BufferedOutput; Route::get('/test', function() { $output = new BufferedOutput; Artisan::call('list', array(), $output); return $output->fetch(); }); 

Кажется, что предыдущие ответы больше не работают в Laravel 5.2 (не уверены в 5.1) Теперь вы можете использовать Artisan::output();

  $output = ''; if (!Schema::hasTable('migrations')) { Artisan::call('migrate:install', array()); $output .= Artisan::output(); } // Updates the migration, then seed the database Artisan::call('migrate:refresh', array('--force' => 1)); $output .= Artisan::output(); Artisan::call('db:seed', array('--force' => 1)); $output .= Artisan::output(); dd($output); 

Конечно, просто взгляните на определение метода Illuminate\Foundation\Artisan::call . Он принимает третий параметр, с помощью которого вы можете управлять используемым выходным потоком. Например:

 $outputStream = new \Symfony\Component\Console\Output\StreamOutput( fopen('php://output', 'w') ); ob_start(); Artisan::call('routes', [], $outputStream); $commandOutput = ob_get_clean();