gpt4 book ai didi

wpf - SSH.NET 实时命令输出监控

转载 作者:行者123 更新时间:2023-12-04 21:55:37 49 4
gpt4 key购买 nike

有一个长时间运行的脚本 script.sh在远程 Linux 机器上。我需要启动它并实时监控它的事件。事件期间的脚本可能会输出到 stdoutstderr .我正在寻找一种方法来捕获两个流。

我使用人次SSH.NET上传script.sh并启动它,因此很高兴看到与此库相关的解决方案。在我看来,完美的解决方案是新方法:

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();
}
});

最佳答案

使用 SshClient.CreateCommand方法。它返回 SshCommand实例。SshCommand类(class)有ExtendedOutputStream返回带有 stdout 和 stderr 的流的属性。
SshCommandTest.cs :

public void Test_Execute_ExtendedOutputStream()
{
var host = Resources.HOST;
var username = Resources.USERNAME;
var password = Resources.PASSWORD;

using (var client = new SshClient(host, username, password))
{
#region Example SshCommand CreateCommand Execute ExtendedOutputStream

client.Connect();
var cmd = client.CreateCommand("echo 12345; echo 654321 >&2");
var result = cmd.Execute();

Console.Write(result);

var reader = new StreamReader(cmd.ExtendedOutputStream);
Console.WriteLine("DEBUG:");
Console.Write(reader.ReadToEnd());

client.Disconnect();

#endregion

Assert.Inconclusive();
}
}

另请参阅类似 WinForms 问题的完整代码 Execute long time command in SSH.NET and display the results continuously in TextBox .

关于wpf - SSH.NET 实时命令输出监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587924/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com