| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 // TODO(ager): The only reason for this class is that we | 7 // TODO(ager): The only reason for this class is that we |
| 8 // cannot patch a top-level at this point. | 8 // cannot patch a top-level at this point. |
| 9 class _ProcessUtils { | 9 class _ProcessUtils { |
| 10 external static void _exit(int status); | 10 external static void _exit(int status); |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 * Use [environment] to set the environment variables for the process. If not | 234 * Use [environment] to set the environment variables for the process. If not |
| 235 * set the environment of the parent process is inherited. Currently, only | 235 * set the environment of the parent process is inherited. Currently, only |
| 236 * US-ASCII environment variables are supported and errors are likely to occur | 236 * US-ASCII environment variables are supported and errors are likely to occur |
| 237 * if an environment variable with code-points outside the US-ASCII range is | 237 * if an environment variable with code-points outside the US-ASCII range is |
| 238 * passed in. | 238 * passed in. |
| 239 * | 239 * |
| 240 * If [includeParentEnvironment] is `true`, the process's environment will | 240 * If [includeParentEnvironment] is `true`, the process's environment will |
| 241 * include the parent process's environment, with [environment] taking | 241 * include the parent process's environment, with [environment] taking |
| 242 * precedence. Default is `true`. | 242 * precedence. Default is `true`. |
| 243 * | 243 * |
| 244 * If [runInShell] is true, the process will be spawned through a system | 244 * If [runInShell] is `true`, the process will be spawned through a system |
| 245 * shell. On Linux and Mac OS, [:/bin/sh:] is used, while | 245 * shell. On Linux and Mac OS, [:/bin/sh:] is used, while |
| 246 * [:%WINDIR%\system32\cmd.exe:] is used on Windows. | 246 * [:%WINDIR%\system32\cmd.exe:] is used on Windows. |
| 247 * | 247 * |
| 248 * Users must read all data coming on the [stdout] and [stderr] | 248 * Users must read all data coming on the [stdout] and [stderr] |
| 249 * streams of processes started with [:Process.start:]. If the user | 249 * streams of processes started with [:Process.start:]. If the user |
| 250 * does not read all data on the streams the underlying system | 250 * does not read all data on the streams the underlying system |
| 251 * resources will not be freed since there is still pending data. | 251 * resources will not be freed since there is still pending data. |
| 252 * | 252 * |
| 253 * The following code uses `Process.start` to grep for `main` in the | 253 * The following code uses `Process.start` to grep for `main` in the |
| 254 * file `test.dart` on Linux. | 254 * file `test.dart` on Linux. |
| 255 * | 255 * |
| 256 * Process.start('grep', ['-i', 'main', 'test.dart']).then((process) { | 256 * Process.start('grep', ['-i', 'main', 'test.dart']).then((process) { |
| 257 * stdout.addStream(process.stdout); | 257 * stdout.addStream(process.stdout); |
| 258 * stderr.addStream(process.stderr); | 258 * stderr.addStream(process.stderr); |
| 259 * }); | 259 * }); |
| 260 * |
| 261 * If [detach] is `true` a detached process will be created. A |
| 262 * detached process has no connection to its parent, and can |
| 263 * keep running on its own when the parent dies. The only |
| 264 * information available from a detached process is its `pid`. There |
| 265 * is no connection to its `stdin`, `stdout` or `stderr` nor will its |
| 266 * exit code become available when it terminates. |
| 260 */ | 267 */ |
| 261 external static Future<Process> start( | 268 external static Future<Process> start( |
| 262 String executable, | 269 String executable, |
| 263 List<String> arguments, | 270 List<String> arguments, |
| 264 {String workingDirectory, | 271 {String workingDirectory, |
| 265 Map<String, String> environment, | 272 Map<String, String> environment, |
| 266 bool includeParentEnvironment: true, | 273 bool includeParentEnvironment: true, |
| 267 bool runInShell: false}); | 274 bool runInShell: false, |
| 275 bool detach: false}); |
| 268 | 276 |
| 269 /** | 277 /** |
| 270 * Starts a process and runs it non-interactively to completion. The | 278 * Starts a process and runs it non-interactively to completion. The |
| 271 * process run is [executable] with the specified [arguments]. | 279 * process run is [executable] with the specified [arguments]. |
| 272 * | 280 * |
| 273 * Use [workingDirectory] to set the working directory for the process. Note | 281 * Use [workingDirectory] to set the working directory for the process. Note |
| 274 * that the change of directory occurs before executing the process on some | 282 * that the change of directory occurs before executing the process on some |
| 275 * platforms, which may have impact when using relative paths for the | 283 * platforms, which may have impact when using relative paths for the |
| 276 * executable and the arguments. | 284 * executable and the arguments. |
| 277 * | 285 * |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 final int errorCode; | 521 final int errorCode; |
| 514 | 522 |
| 515 const ProcessException(this.executable, this.arguments, [this.message = "", | 523 const ProcessException(this.executable, this.arguments, [this.message = "", |
| 516 this.errorCode = 0]); | 524 this.errorCode = 0]); |
| 517 String toString() { | 525 String toString() { |
| 518 var msg = (message == null) ? 'OS error code: $errorCode' : message; | 526 var msg = (message == null) ? 'OS error code: $errorCode' : message; |
| 519 var args = arguments.join(' '); | 527 var args = arguments.join(' '); |
| 520 return "ProcessException: $msg\n Command: $executable $args"; | 528 return "ProcessException: $msg\n Command: $executable $args"; |
| 521 } | 529 } |
| 522 } | 530 } |
| OLD | NEW |