Выходной буфер Artisan не содержит всех выходных данных.

Я использую следующий код, чтобы перенаправить вывод команды ремесленника в пределах маршрута.

use Symfony\Component\Console\Output\BufferedOutput;

Route::get('/restart', function()
{
    $output = new BufferedOutput;
    Artisan::call('remote:restart', array(), $output);
    return $output->fetch();
});

Это работает для большинства случаев. Однако, если в команде я использую компонент SSH для запуска некоторых задач на удаленном сервере, результат, полученный в результате SSH::into()->run() будет игнорироваться приведенным выше кодом.

Если я запускаю команду artisan вручную, я получаю следующий вывод:

start
[root@remote-host] (xxxx) Stopping php-fpm: 
[root@remote-host] (xxxx) [  OK  ]
[root@remote-host] (xxxx) Starting php-fpm: 
[root@remote-host] (xxxx) [  OK  ]
[root@remote-host] (xxxx) Stopping nginx: 
[root@remote-host] (xxxx) [  OK  ]
[root@remote-host] (xxxx) Starting nginx: 
[root@remote-host] (xxxx) [  OK  ]
end

Но $output->fetch() возвращает только:

start end

1 ответ

Решение

Вы должны установить выходной интерфейс на нем:

use Symfony\Component\Console\Output\BufferedOutput;

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

    SSH::setOutput($output);

    SSH::run('ls -la');

    return $output->fetch();
});
Другие вопросы по тегам