last modified April 4, 2025
The ProcessResult class in Dart represents the result of running
a process. It provides access to exit code, stdout, stderr, and process
information.
ProcessResult is returned by functions like Process.run and
Process.runSync. It's part of Dart's dart:io library.
ProcessResult is an immutable object containing process execution
results. It's created when a process completes and cannot be modified.
Key properties include exitCode, stdout, stderr, and pid. These provide complete information about process execution and output.
This example shows basic process execution and result inspection.
import 'dart:io';
void main() async {
var result = await Process.run('ls', ['-l']);
print('Exit code: ${result.exitCode}');
print('Stdout: ${result.stdout}');
print('Stderr: ${result.stderr}');
}
We run the 'ls -l' command and inspect its results. The
ProcessResult object contains all execution details including
output streams and exit status.
$ dart main.dart Exit code: 0 Stdout: total 8 -rw-r--r-- 1 user staff 123 Apr 4 10:00 main.dart Stderr:
This example demonstrates error handling with ProcessResult.
import 'dart:io';
void main() async {
var result = await Process.run('grep', ['pattern', 'nonexistent.txt']);
if (result.exitCode != 0) {
print('Command failed with exit code ${result.exitCode}');
print('Error output: ${result.stderr}');
} else {
print('Output: ${result.stdout}');
}
}
We check the exitCode to determine command success. Non-zero exit codes typically indicate errors, with details in stderr. This pattern is common for robust process handling.
$ dart main.dart Command failed with exit code 2 Error output: grep: nonexistent.txt: No such file or directory
This example shows parsing command output from ProcessResult.
import 'dart:io';
void main() async {
var result = await Process.run('date', ['+%Y-%m-%d']);
if (result.exitCode == 0) {
var date = (result.stdout as String).trim();
print('Current date: $date');
} else {
print('Failed to get date');
}
}
We execute the date command and parse its output. The stdout is cast to
String and trimmed for clean processing. This demonstrates working
with command output.
$ dart main.dart Current date: 2025年04月04日
This example shows processing multiple commands and their results.
import 'dart:io';
void main() async {
var commands = [
['echo', 'Hello Dart'],
['uname', '-a'],
['whoami']
];
for (var cmd in commands) {
var result = await Process.run(cmd[0], cmd.sublist(1));
print('Command: ${cmd.join(' ')}');
print('Exit code: ${result.exitCode}');
print('Output: ${(result.stdout as String).trim()}');
print('---');
}
}
We execute multiple commands in sequence and process each result. The example shows handling different command types and their outputs systematically.
$ dart main.dart Command: echo Hello Dart Exit code: 0 Output: Hello Dart --- Command: uname -a Exit code: 0 Output: Darwin Kernel Version 22.1.0... --- Command: whoami Exit code: 0 Output: user ---
This example demonstrates handling binary output from processes.
import 'dart:io';
void main() async {
var result = await Process.run('ls', ['-l'], stdoutEncoding: null);
if (result.exitCode == 0) {
var output = result.stdout as List<int>;
print('Binary output length: ${output.length} bytes');
print('First 10 bytes: ${output.take(10)}');
}
}
By setting stdoutEncoding to null, we get raw bytes instead of strings. This is useful for binary data processing. The output is available as List<int>.
$ dart main.dart Binary output length: 123 bytes First 10 bytes: (116, 111, 116, 97, 108, 32, 56, 13, 10, 45)
Dart ProcessResult Documentation
This tutorial covered Dart's ProcessResult class with practical examples showing process execution, output handling, and error management in Dart applications.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all Dart tutorials.