Класс Process
Средство для выполнения программы.
Используйте статические методы start и run, чтобы запустить новый процесс. Метод run выполняет процесс без взаимодействия до его завершения. В отличие от него, метод start позволяет вашему коду взаимодействовать с выполняющимся процессом.
Запуск процесса с помощью метода run
В следующем примере кода метод run используется для создания процесса, выполняющего команду UNIX ls, которая выводит содержимое каталога. По завершении процесса метод run возвращает объект ProcessResult. Он предоставляет доступ к выводу процесса и коду завершения. Метод run не возвращает объект Process; благодаря этому ваш код не может взаимодействовать с выполняющимся процессом.
import 'dart:io';
main() async {
// List all files in the current directory in UNIX-like systems.
var result = await Process.run('ls', ['-l']);
print(result.stdout);
} Запуск процесса с помощью метода start
В следующем примере метод start используется для создания процесса. Метод start возвращает Future для объекта Process. Когда Future завершается, процесс запускается, и ваш код может взаимодействовать с ним: записывать данные в stdin, прослушивать stdout и так далее.
В следующем примере запускается утилита UNIX cat, которая при отсутствии аргументов командной строки выводит полученные данные. Программа записывает данные в стандартный поток ввода процесса и выводит данные из его стандартного потока вывода.
import 'dart:io';
import 'dart:convert';
main() async {
var process = await Process.start('cat', []);
process.stdout
.transform(utf8.decoder)
.forEach(print);
process.stdin.writeln('Hello, world!');
process.stdin.writeln('Hello, galaxy!');
process.stdin.writeln('Hello, universe!');
} Стандартные потоки ввода-вывода
Как видно из предыдущего примера кода, вы можете взаимодействовать со стандартным потоком вывода Process с помощью геттера stdout, а со стандартным потоком ввода Process — с помощью геттера stdin. Кроме того, Process предоставляет геттер stderr для работы со стандартным потоком ошибок Process.
Потоки Process отличаются от потоков верхнего уровня текущей программы.
Коды завершения
Вызовите метод exitCode, чтобы получить код завершения процесса. Код завершения указывает, завершилась ли программа успешно (обычно об этом свидетельствует код завершения 0) или с ошибкой.
Если используется метод start, значение exitCode доступно через Future объекта Process (как показано в примере ниже). Если используется метод run, значение exitCode доступно через геттер экземпляра ProcessResult.
import 'dart:io';
main() async {
var process = await Process.start('ls', ['-l']);
var exitCode = await process.exitCode;
print('exit code: $exitCode');
} Конструкторы
- Process()
Свойства
- exitCode → Future<
int> только для чтения -
Future, который завершается с кодом завершения процесса после его завершения. - hashCode → int только для чтенияунаследовано
- Хеш-код этого объекта.
- pid → int только для чтения
- Идентификатор процесса.
- runtimeType → Type только для чтенияунаследовано
- Представление типа объекта во время выполнения.
- stderr → Stream<
List< int>> только для чтения - Стандартный поток ошибок процесса в виде
Stream. - stdin → IOSink только для чтения
- Стандартный поток ввода процесса в виде IOSink.
- stdout → Stream<
List< int>> только для чтения - Стандартный поток вывода процесса в виде
Stream.
Методы
- kill(
[ProcessSignal signal = ProcessSignal.sigterm]) → bool - Завершает процесс.
- noSuchMethod(
Invocation invocation) → dynamic унаследовано - Вызывается при обращении к несуществующему методу или свойству.
- toString(
) → String унаследовано - Строковое представление этого объекта.
Операторы
- operator ==(
Object other) → bool унаследовано - Оператор равенства.
Статические методы
- killPid(
int pid, [ProcessSignal signal = ProcessSignal.sigterm]) → bool - Завершает процесс с идентификатором
pid. - run(
String executable, List< String> arguments, {String? workingDirectory, Map< String, String>? environment, bool includeParentEnvironment = true, bool runInShell = false, Encoding? stdoutEncoding = systemEncoding, Encoding? stderrEncoding = systemEncoding}) → Future< ProcessResult> - Запускает процесс и выполняет его без взаимодействия до завершения. Процесс запускается
executableс указаннымиarguments. - runSync(
String executable, List< String> arguments, {String? workingDirectory, Map< String, String>? environment, bool includeParentEnvironment = true, bool runInShell = false, Encoding? stdoutEncoding = systemEncoding, Encoding? stderrEncoding = systemEncoding}) → ProcessResult - Запускает процесс и выполняет его до завершения. Это синхронный вызов, который блокирует выполнение до завершения дочернего процесса.
- start(
String executable, List< String> arguments, {String? workingDirectory, Map< String, String>? environment, bool includeParentEnvironment = true, bool runInShell = false, ProcessStartMode mode = ProcessStartMode.normal}) → Future< Process> - Запускает процесс, выполняющий
executableс указаннымиarguments.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-io/Process-class.html