Метод fromShellCommandline
Метод fromShellCommandline класса Process создаёт
экземпляр процесса из команды shell, переданной строкой.
В отличие от конструктора, который принимает массив аргументов,
этот метод позволяет выполнить команду целиком, как если бы
она была введена в терминале. Первым параметром передаётся
строка команды. Вторым параметром можно передать рабочую
директорию, третьим - переменные окружения, четвёртым - таймаут.
Синтаксис
Process::fromShellCommandline(
string $command,
?string $cwd = null,
?array $env = null,
?float $timeout = 60
)
Пример
Давайте создадим процесс из shell-команды и выведем результат:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = Process::fromShellCommandline('echo "hello"');
$process->run();
return new Response($process->getOutput());
}
}
?>
Результат выполнения кода:
hello
Пример
Давайте передадим переменные окружения и рабочую директорию:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function env(): Response
{
$process = Process::fromShellCommandline(
'echo $APP_ENV',
null,
['APP_ENV' => 'abcde']
);
$process->run();
return new Response($process->getOutput());
}
}
?>
Результат выполнения кода:
abcde
Пример
Давайте обработаем ошибку выполнения команды:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Process\Process;
class ProcessController extends AbstractController
{
public function error(): Response
{
$process = Process::fromShellCommandline('ls /not-exists-path');
$process->run();
if (!$process->isSuccessful()) {
return new Response($process->getErrorOutput());
}
return new Response($process->getOutput());
}
}
?>
Результат выполнения кода:
ls: cannot access '/not-exists-path': No such file or directory
Смотрите также
-
метод
run,
который запускает процесс и ждёт его завершения -
метод
mustRun,
который запускает процесс и бросает исключение при ошибке -
метод
getOutput,
который возвращает стандартный вывод процесса -
метод
getErrorOutput,
который возвращает вывод ошибок процесса