Метод getErrorOutput класса Process
Метод getErrorOutput класса Process возвращает текст, который процесс записал в стандартный поток ошибок (stderr). Метод не принимает параметров и возвращает строку. Обычно его вызывают после завершения процесса, чтобы прочитать сообщения об ошибках, которые возникли при выполнении команды.
Синтаксис
$res = $process->getErrorOutput();
Пример
Давайте запустим команду, которая завершится с ошибкой, и прочитаем её поток ошибок:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['ls', '/nonexistent']);
$process->run();
$res = $process->getErrorOutput();
return new Response($res);
}
}
?>
Результат выполнения кода:
"ls: cannot access '/nonexistent': No such file or directory"
Пример
Давайте сравним вывод команды и её поток ошибок:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['ls', '/nonexistent']);
$process->run();
$output = $process->getOutput();
$errorOutput = $process->getErrorOutput();
return new Response('output: "' . $output . '", error: "' . $errorOutput . '"');
}
}
?>
Результат выполнения кода:
output: "", error: "ls: cannot access '/nonexistent': No such file or directory"
Пример
Давайте запустим команду, которая пишет в оба потока, и прочитаем поток ошибок:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['sh', '-c', 'echo "hello"; echo "abcde" >&2']);
$process->run();
$res = $process->getErrorOutput();
return new Response($res);
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте проверим, что метод возвращает пустую строку, если ошибок не было:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentProcessProcess;
class ProcessController extends AbstractController
{
public function index(): Response
{
$process = new Process(['echo', 'hello']);
$process->run();
$res = $process->getErrorOutput();
return new Response('"' . $res . '"');
}
}
?>
Результат выполнения кода:
""