| Index: runtime/bin/process.dart
|
| diff --git a/runtime/bin/process.dart b/runtime/bin/process.dart
|
| index 351465847f6efada58150c04bd14f73ae7b73d22..01d27a9456c4bb59c9492a6c042d90b11145555f 100644
|
| --- a/runtime/bin/process.dart
|
| +++ b/runtime/bin/process.dart
|
| @@ -3,46 +3,47 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| /**
|
| - * [Process] objects are used to start new processes and interact with
|
| - * them.
|
| + * [Process] is used to start new processes using the static
|
| + * [start] and [run] methods.
|
| */
|
| -interface Process default _Process {
|
| +class Process {
|
| /**
|
| - * Creates a new process object and starts a process running the
|
| - * [executable] with the specified [arguments]. When the process has
|
| - * been successfully started [onStart] is called. If the process
|
| - * fails to start [onError] is called.
|
| + * Starts a process running the [executable] with the specified
|
| + * [arguments]. Returns a [Process] instance that can be used to
|
| + * interact with the process.
|
| *
|
| * An optional [ProcessOptions] object can be passed to specify
|
| * options other than the executable and the arguments.
|
| *
|
| + * When the process has been successfully started [onStart] is
|
| + * called on the returned Process object. If the process fails to
|
| + * start [onError] is called on the returned Process object.
|
| + *
|
| * No data can be written to the process stdin and the process
|
| * cannot be closed nor killed before [onStart] has been invoked.
|
| */
|
| - Process.start(String executable,
|
| - List<String> arguments,
|
| - [ProcessOptions options]);
|
| + static Process start(String executable,
|
| + List<String> arguments,
|
| + [ProcessOptions options]) {
|
| + return _Process.start(executable, arguments, options);
|
| + }
|
|
|
| /**
|
| - * Creates a new process object, starts a process and runs it
|
| - * non-interactively to completion. The process run is [executable]
|
| - * with the specified [arguments]. When the process has been
|
| - * successfully started [onStart] is called. If the process fails to
|
| - * start [onError] is called.
|
| + * Starts a process and runs it non-interactively to completion. The
|
| + * process run is [executable] with the specified [arguments].
|
| *
|
| - * Options other than the executable and the arguments are specified
|
| - * using a [ProcessOptions] object. If no options are required,
|
| - * [null] can be passed as the options.
|
| + * An optional [ProcessOptions] object can be passed to specify
|
| + * options other than the executable and the arguments.
|
| *
|
| - * No communication via [stdin], [stdout] or [stderr] can take place
|
| - * with a non-interactive process. Instead, the process is run to
|
| - * completion at which point the exit code and stdout and stderr are
|
| - * supplied to the [callback] parameter.
|
| + * Returns a [:Future<ProcessResult>:] that completes with the
|
| + * result of running the process, i.e., exit code, standard out and
|
| + * standard in.
|
| */
|
| - Process.run(String executable,
|
| - List<String> arguments,
|
| - ProcessOptions options,
|
| - void callback(int exitCode, String stdout, String stderr));
|
| + static Future<ProcessResult> run(String executable,
|
| + List<String> arguments,
|
| + [ProcessOptions options]) {
|
| + return _Process.run(executable, arguments, options);
|
| + }
|
|
|
| /**
|
| * Returns an input stream of the process stdout.
|
| @@ -50,7 +51,7 @@ interface Process default _Process {
|
| * Throws an [UnsupportedOperationException] if the process is
|
| * non-interactive.
|
| */
|
| - InputStream get stdout();
|
| + abstract InputStream get stdout();
|
|
|
| /**
|
| * Returns an input stream of the process stderr.
|
| @@ -58,7 +59,7 @@ interface Process default _Process {
|
| * Throws an [UnsupportedOperationException] if the process is
|
| * non-interactive.
|
| */
|
| - InputStream get stderr();
|
| + abstract InputStream get stderr();
|
|
|
| /**
|
| * Returns an output stream to the process stdin.
|
| @@ -66,13 +67,13 @@ interface Process default _Process {
|
| * Throws an [UnsupportedOperationException] if the process is
|
| * non-interactive.
|
| */
|
| - OutputStream get stdin();
|
| + abstract OutputStream get stdin();
|
|
|
| /**
|
| * Set the start handler which gets invoked when the process is
|
| * successfully started.
|
| */
|
| - void set onStart(void callback());
|
| + abstract void set onStart(void callback());
|
|
|
| /**
|
| * Sets an exit handler which gets invoked when the process
|
| @@ -81,20 +82,20 @@ interface Process default _Process {
|
| * Throws an [UnsupportedOperationException] if the process is
|
| * non-interactive.
|
| */
|
| - void set onExit(void callback(int exitCode));
|
| + abstract void set onExit(void callback(int exitCode));
|
|
|
| /**
|
| * Set an error handler which gets invoked if an operation on the process
|
| * fails.
|
| */
|
| - void set onError(void callback(e));
|
| + abstract void set onError(void callback(e));
|
|
|
| /**
|
| * Kills the process. When the process terminates as a result of
|
| * calling [kill] [onExit] is called. If the kill operation fails,
|
| * [onError] is called.
|
| */
|
| - void kill();
|
| + abstract void kill();
|
|
|
| /**
|
| * Terminates the streams of a process. [close] most be called on a
|
| @@ -103,7 +104,29 @@ interface Process default _Process {
|
| * closed it can no longer be killed and [onExit] is detached so the
|
| * application is not notified of process termination.
|
| */
|
| - void close();
|
| + abstract void close();
|
| +}
|
| +
|
| +
|
| +/**
|
| + * [ProcessResult] represents the result of running a non-interactive
|
| + * process started with [:Process.run:].
|
| + */
|
| +interface ProcessResult {
|
| + /**
|
| + * Exit code for the process.
|
| + */
|
| + int get exitCode();
|
| +
|
| + /**
|
| + * Standard output from the process as a string.
|
| + */
|
| + String get stdout();
|
| +
|
| + /**
|
| + * Standard error from the process as a string.
|
| + */
|
| + String get stderr();
|
| }
|
|
|
|
|
| @@ -156,7 +179,7 @@ class ProcessOptions {
|
|
|
| class ProcessException implements Exception {
|
| const ProcessException([String this.message, int this.errorCode = 0]);
|
| - String toString() => "ProcessException: $message";
|
| + String toString() => "ProcessException: $message ($errorCode)";
|
|
|
| /**
|
| * Contains the system message for the process exception if any.
|
|
|