fix SSHClient.exec

This commit is contained in:
lollipopkit
2022-12-11 14:08:08 +08:00
parent d43d251d92
commit 78b46998d1
10 changed files with 57 additions and 45 deletions

View File

@@ -15,20 +15,34 @@ extension SSHClientX on SSHClient {
{OnStd? onStderr, OnStd? onStdout, OnStdin? stdin}) async {
final session = await execute(cmd);
if (onStderr != null) {
await for (final data in session.stderr) {
onStderr(data.string, session.stdin);
}
}
final stdoutDone = Completer<void>();
final stderrDone = Completer<void>();
if (onStdout != null) {
await for (final data in session.stdout) {
onStdout(data.string, session.stdin);
}
session.stdout.listen(
(e) => onStdout(e.string, session.stdin),
onDone: stdoutDone.complete,
);
} else {
stdoutDone.complete();
}
if (onStderr != null) {
session.stderr.listen(
(e) => onStderr(e.string, session.stdin),
onDone: stderrDone.complete,
);
} else {
stderrDone.complete();
}
if (stdin != null) {
stdin(session.stdin);
}
await stdoutDone.future;
await stderrDone.future;
session.close();
return session.exitCode;
}