Команда Laravel вызвана из работы Laravel - PullRequest
3 голосов
/ 29 мая 2019

У меня есть команда с именем MyCommand, и я вызываю ее из задания с именем MyJob. Я не могу видеть выходные данные команды, когда она вызывается из задания. Но если я запускаю команду прямо из командной строки, вывод команды виден.

MyCommand.php код:

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MyCommand extends Command
{

    protected $signature = 'mycommand:doit';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $this->info('Process started');

        //Some process is done here

        $this->info('Process completed');
    }
} 

MyJob.php код:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Artisan;

class MyJob implements ShouldQueue
{
    public function __construct()
    {

    }

    public function handle()
    {
        Artisan::call('mycommand:doit');
    }
} 

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Как и в теории, вы не находитесь в терминале, когда выполняете свое задание (задание может быть, например, поставлено в очередь или запланировано), выход не сохраняется при запуске вне терминала.

Однако вы можетепо-прежнему получить выходной буфер с Artisan :: output ();

Пример:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Artisan;

class MyJob implements ShouldQueue
{
    public function __construct()
    {

    }

    public function handle()
    {
        Artisan::call('mycommand:doit');
        $output = Artisan::output(); // $output is a string

        // Do whatever you want with $output
    }
}

Обновление: синхронный вывод

Вы можете попробовать это: Пример команды:

class SlowCommand extends Command
{
    protected $signature = "slow";


    public function handle()
    {
        $max = 10;

        for ($i = 0; $i < $max; $i++) {
            $this->line($i);
            sleep(1);
        }
    }
}
// Synchronous output
Artisan::call("slow"); 
echo Artisan::output();

// Asynchronous output
$buffer = new ConsoleOutput();
Artisan::call("slow", [], $buffer);
0 голосов
/ 29 мая 2019

используйте метод Artisan::output, чтобы получить результат от последней выполненной команды фасадом Artisan.

...