execute method

Future<ExecResult> execute({
  1. required String nodeId,
  2. required String command,
  3. List<String> args = const [],
  4. Map<String, String> env = const {},
  5. String? cwd,
})

Runs command to completion on nodeId, capturing its output.

Implementation

Future<ExecResult> execute({
  required String nodeId,
  required String command,
  List<String> args = const [],
  Map<String, String> env = const {},
  String? cwd,
}) async {
  final session = await openSession(
    nodeId: nodeId,
    mode: SessionMode.exec,
    command: command,
    args: args,
    env: env,
    cwd: cwd,
  );
  final out = BytesBuilder(copy: false);
  final err = BytesBuilder(copy: false);
  final outDone = session.stdout.forEach(out.add);
  final errDone = session.stderr.forEach(err.add);
  final code = await session.exitCode;
  await Future.wait([outDone, errDone]).catchError((_) => const <void>[]);
  return ExecResult(
    exitCode: code,
    stdout: out.takeBytes(),
    stderr: err.takeBytes(),
  );
}