SSH.NET real-time command output monitoring
Es ist noch ein langer script läuft script.sh
auf einem remote-Linux-Maschine. Ich brauche, um es zu starten und zu überwachen Aktivität in Echtzeit. Das Skript während der Aktivität kann die Ausgabe auf stdout
und stderr
. Ich bin auf der Suche nach einem Weg, zu erfassen sowohl des streams.
Benutze ich Renci SSH.NET hochladen script.sh
aus und starten Sie es, so wäre es toll zu sehen, eine Lösung zu begrenzt, um diese Bibliothek. In meinem Kopf die perfekte Lösung ist die neue Methode:
var realTimeScreen= ...;
var commandExecutionStatus = sshClient.RunCommandAsync(
command: './script.sh',
stdoutEventHandler: stdoutString => realTimeScreen.UpdateStdout(stdString)
stderrEventHandler: stderrString => realTimeScreen.UpdateStderr(stderrString));
...
commandExecutionStatus.ContinueWith(monitoringTask =>
{
if (monitoringTask.Completed)
{
realTimeScreen.Finish();
}
});
InformationsquelleAutor Pixar | 2015-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
SshClient.CreateCommand
Methode. Es gibtSshCommand
Instanz.Den
SshCommand
Klasse hatExtendedOutputStream
Eigenschaft , gibt einen stream mit sowohl stdout und stderr.Sehen
SshCommandTest.cs
:Siehe auch eine vollständige code für ähnliche WinForms Frage Führen lange Zeit Befehl in SSH.NET und Anzeige der Ergebnisse kontinuierlich in die TextBox.
cmd.Execute()
undOutputStreams
. Nachdem ich zum Schluss Polieren Sie den code werde ich hier einen wrapper, der ist perfekt für meine situation. Wieder einmal, vielen Dank 🙂InformationsquelleAutor Martin Prikryl
So, hier ist die Lösung, die ich kam mit. Natürlich kann es verbessert werden, so ist es offen für Kritik.
Ich verwendet
statt
Task.Yield()
weilTask.Yield()
machen Fortführung, eine höhere Priorität als GUI-Ereignissen, sondern, als eine schlechte Folge, es Anforderungen Ihrer Anwendung zu verwendenWindowsBase.dll
.await client.CreateCommand("sleep 1; echo 1; sleep 1; echo 2; ps -ax | grep java").ExecuteAsync(Fortschritt, neue CancellationToken()); nur die Erträge einer Zeile mit "1" für mich. Dies scheint nicht korrekt sein.
InformationsquelleAutor Pixar