Помощник Process

Дата обновления перевода 2024-06-24

Помощник Process

Помощник Process отображает процессы во время их выполнения и сообщает полезную информацию о статусе процесса.

Чтобы отобразить детали процесса, используйте ProcessHelper и запустите вашу команду с детализацией. Например, выполнение следующего кода с очень высокой детализцией (например, -vv):

1
2
3
4
5
6
use Symfony\Component\Process\Process;

$helper = $this->getHelper('process');
$process = new Process(array('figlet', 'Symfony'));

$helper->run($output, $process);

Приведёт к такому выводу:

В выводе консоли отображаются две строки: "RUN 'figlet' 'Symfony'" и "RES Команда выполнена успешно".

Это приведёт к более детализированному выводу с детализацией отладки (например, -vvv):

Между командной строкой и строкой результата теперь отображается вывод команды с префиксом "OUT".

В случае неудачи процесса, отладка будет проще:

В последней строке отображается "RES 127 Command dit not run successfully", а в строках вывода - более подробная информация об ошибках команды.

Note

По умолчанию помощник процесса использует вывод ошибок (stderr) в качестве вывода по умолчанию. Это поведение можно изменить, передав экземпляр StreamOutput в метод run().

Аргументы

Существует три способа использовать помощник процесса:

  • Использование командной строки:

    1
    2
    // ...
    $helper->run($output, 'figlet Symfony');
  • Массив аргументов:

    1
    2
    // ...
    $helper->run($output, array('figlet', 'Symfony'));

    Note

    При запуске помощника с массивом аргументов, имейте в виду, что они будут автоматически экранированы.

  • Передача экземпляра Process:

    1
    2
    3
    4
    5
    6
    use Symfony\Component\Process\Process;
    
    // ...
    $process = new Process(array('figlet', 'Symfony'));
    
    $helper->run($output, $process);

Настроенное отображение

Вы можете отобразить настроенное сообщение об ошибке используя третий аргумент метода run():

1
$helper->run($output, $process, 'The process failed :(');

Обратный вызов пользовательского процесса может быть передан в качестве четвёртого аргумента. Обратитесь к Компоненту Process, чтобы увидеть документацию обратного вызова:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Process\Process;

$helper->run($output, $process, 'The process failed :(', function (string $type, string $data): void {
    if (Process::ERR === $type) {
        // ... сделать что-то с выводом stderr
    } else {
        // ... сделать что-то с stdout
    }
});