-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproc.dart
86 lines (85 loc) · 2.71 KB
/
proc.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/// Run and manage OS processes with an extensible and testable API.
///
/// Most use cases of running processes are typically handled by importing and
/// using `dart:io` and using the `Process` class. However, the `proc` library
/// provides a more flexible and extensible API for running and managing
/// processes.
///
/// Features include:
///
/// - Setting default parameters for launching processes.
/// - Cross-platform APIs that do not require `dart:io`.
/// - Create and manage individual processes using [ProcessController].
/// - Emulate a file system like environment using [ExecutableContainer].
///
/// Use and create a [ProcessHost], which is a replacement for `dart:io`'s
/// `Process` class.
///
/// The `ProcessHost` class can start a new process or listen to signals to the
/// current process:
///
/// ```dart
/// import 'package:proc/proc.dart';
///
/// void main() async {
/// final host = ProcessHost();
/// host.watch(ProcessSignal.sigint).listen((signal) {
/// print('Received signal: $signal');
/// });
/// final process = await host.run('echo', ['Hello, World!']);
/// print('Process exited with code: ${await process.exitCode}');
/// }
/// ```
///
/// To emulate a process, use [ProcessController]:
///
/// ```dart
/// import 'package:proc/proc.dart';
///
/// void main() {
/// final controller = ProcessController();
/// controller.addStdoutLine('Hello, World!');
/// controller.complete(ExitCode.success);
///
/// // Use the controller to access the process.
/// final process = controller.process;
///
/// // ...
/// }
/// ```
///
/// Create a simulated [ProcessHost] using [ExecutableContainer], which stores
/// callbacks to execute programs:
///
/// ```dart
/// import 'package:proc/proc.dart';
///
/// void main() async {
/// final container = ExecutableContainer();
/// container.setExecutable('echo', (start) async {
/// late final ProcessController controller;
/// controller = ProcessController(
/// onInput: (data) {
/// controller.addStdoutBytes(data);
/// },
/// );
/// return controller.process;
/// });
/// }
/// ```
///
/// <!--
/// @docImport 'src/executable_container.dart';
/// @docImport 'src/process_controller.dart';
/// @docImport 'src/process_host.dart';
/// -->
library;
export 'src/executable_container.dart' show ExecutableContainer;
export 'src/exit_code.dart' show ExitCode;
export 'src/process.dart' show Process;
export 'src/process_controller.dart' show ProcessController;
export 'src/process_exception.dart' show ProcessException;
export 'src/process_host.dart' show ProcessHost;
export 'src/process_run_mode.dart' show ProcessRunMode;
export 'src/process_signal.dart' show ProcessSignal;
export 'src/process_sink.dart' show ProcessSink;