Класс 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!');
} Стандартные потоки ввода-вывода
Как видно в предыдущем примере кода, вы можете взаимодействовать со стандартным потоком вывода процесса через getter stdout, и вы можете взаимодействовать со стандартным потоком ввода процесса через getter stdin. Кроме того, Process предоставляет getter stderr для использования стандартного потока ошибок процесса.
Потоки процесса отличаются от потоков верхнего уровня текущей программы.
Коды завершения
Вызовите метод exitCode, чтобы получить код завершения процесса. Код завершения указывает, завершилась ли программа успешно (обычно обозначается кодом завершения 0) или с ошибкой.
Если используется метод start, код завершения доступен через Future объекта Process (как показано в примере ниже). Если используется метод run, код завершения доступен через getter экземпляра 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 только для чтения, унаследованное
- Представление runtime типа объекта.
- stderr → Stream<
List< int>> только для чтения - Стандартный поток ошибок процесса в виде потока.
- stdin → IOSink только для чтения
- Стандартный поток ввода процесса в виде IOSink.
- stdout → Stream<
List< int>> только для чтения - Стандартный поток вывода процесса в виде потока.
Методы
- 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.18.5/dart-io/Process-class.html