Свойство stderr
Свойство stderr класса Process возвращает поток
стандартного вывода ошибок запущенного процесса. Свойство
имеет тип Stream<List<int>> и доступно только для чтения.
Через этот поток процесс передает сообщения об ошибках,
предупреждения и другую диагностическую информацию. Данные
приходят в виде списка байтов, который обычно декодируют
в строку с помощью utf8.decode.
Свойство stderr доступно только после успешного запуска
процесса, поэтому его используют вместе с методами
start или run. Чтобы получить текст ошибки,
нужно подписаться на поток и преобразовать байты в строку.
Синтаксис
process.stderr
Пример
Давайте запустим процесс и выведем его поток ошибок.
Для этого воспользуемся методом start:
import 'dart:convert';
import 'dart:io';
void main() async
{
Process process = await Process.start('ls', ['/nonexistent']);
String err = await utf8.decodeStream(process.stderr);
print(err);
}
Результат выполнения кода:
"ls: cannot access '/nonexistent': No such file or directory"
Пример
Давайте подпишемся на поток ошибок и выведем каждую порцию данных по мере ее поступления:
import 'dart:convert';
import 'dart:io';
void main() async
{
Process process = await Process.start('ls', ['/nonexistent']);
await for (List<int> bytes in process.stderr) {
String line = utf8.decode(bytes);
print('Error: ' + line);
}
}
Результат выполнения кода:
"Error: ls: cannot access '/nonexistent': No such file or directory"
Пример
Давайте соберем все сообщения об ошибках в одну строку
с помощью listen:
import 'dart:convert';
import 'dart:io';
void main() async
{
Process process = await Process.start('ls', ['/nonexistent']);
StringBuffer buffer = StringBuffer();
process.stderr.listen((List<int> bytes) {
buffer.write(utf8.decode(bytes));
});
int code = await process.exitCode;
print('Exit code: ' + code.toString());
print('Errors: ' + buffer.toString());
}
Результат выполнения кода:
"Exit code: 2"
"Errors: ls: cannot access '/nonexistent': No such file or directory"