C# 从长时间运行的SSH命令将SSH输出获取到StreamReader
我正在尝试从一个长时间运行的C# 从长时间运行的SSH命令将SSH输出获取到StreamReader,c#,.net,ssh,C#,.net,Ssh,我正在尝试从一个长时间运行的SSH命令捕获输出,一旦调用该命令,最初生成任何文本输出可能需要几秒钟,完全完成可能需要一分钟。 如果我发出一个简单的命令来执行,例如ls,它将立即输出到输出流中,那么下面的代码片段就可以正常工作。 但是,如果我运行的命令不能立即产生任何输出,则不会返回任何内容,并且会断开连接。 using (var sshClient = new SshClient(target, 22, userName, password)) { sshClient.Connect()
SSH
命令捕获输出,一旦调用该命令,最初生成任何文本输出可能需要几秒钟,完全完成可能需要一分钟。如果我发出一个简单的命令来执行,例如
ls
,它将立即输出到输出流中,那么下面的代码片段就可以正常工作。但是,如果我运行的命令不能立即产生任何输出,则不会返回任何内容,并且会断开连接。
using (var sshClient = new SshClient(target, 22, userName, password))
{
sshClient.Connect();
var cmd = sshClient.CreateCommand(command);
var result = cmd.BeginExecute();
using (var reader = new StreamReader(cmd.OutputStream))
{
while (!reader.EndOfStream || !result.IsCompleted)
{
string line = reader.ReadLine();
if (line != null)
{
Console.WriteLine(line);
}
}
sshClient.Disconnect();
}
}
BeginExecute
开始异步命令执行。您需要等待并继续读取输出流,直到它完成
简单地说,
using (var sshClient = new SshClient(host, 22, username, password)) {
sshClient.Connect();
var cmd = sshClient.CreateCommand("for i in `seq 1 10`; do sleep 1; echo $i; done");
var asyncResult = cmd.BeginExecute();
var outputReader = new StreamReader(cmd.OutputStream);
string output;
while (!asyncResult.IsCompleted) {
output = outputReader.ReadToEnd();
Console.Out.Write(output);
}
output = outputReader.ReadToEnd();
Console.Out.Write(output);
}
谢谢,我现在得到了预期的结果。