execCmds method Null safety
Executes a command list in a WSL distro
@param distribution: String
@param cmd: List
Implementation
Future<List<int>> execCmds(
String distribution,
List<String> cmds, {
required Function(String) onMsg,
required Function onDone,
}) async {
List<int> processes = [];
Process result = await Process.start(
'wsl', ['-d', distribution, '-u', 'root'],
mode: ProcessStartMode.detachedWithStdio);
Timer currentWaiter = Timer(const Duration(seconds: 15), () {
result.kill();
onDone();
});
result.stdout
.cast<List<int>>()
.transform(const Utf8Decoder())
.listen((String line) {
resultQueue.add(line);
onMsg(line);
currentWaiter.cancel();
// No new output within the last 30 seconds
currentWaiter = Timer(const Duration(seconds: 15), () {
result.kill();
onDone();
});
});
for (var cmd in cmds) {
result.stdin.writeln(cmd);
}
return processes;
}