简体   繁体   中英

How to save/redirect output from Laravel Artisan command?

I'm using Artisan::call() in one of my routes and would like to save the command output to a variable.

Is there any way to capture the STDOUT and STDERR generated by the artisan command?

This is a way:

use Symfony\Component\Console\Output\BufferedOutput;

Route::get('/test', function()
{
    $output = new BufferedOutput;

    Artisan::call('list', array(), $output);

    return $output->fetch();
});

Seems the previous answers don't work in Laravel 5.2 any more (not sure about 5.1) You can now use 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);

When running a command from inside another command, here is how to get all the styling:

public function handle()
{
    Artisan::call('other:command', [], $this->getOutput());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM