我正在尝试从运行时间较长的SSH
命令捕获输出,该命令一次调用可能会花费几秒钟的时间来最初生成任何文本输出,并且可能需要一分钟才能完全完成。
< / p>
如果我发出一个简单的命令来执行,例如ls
,它将立即产生输出到输出流,则下面的代码片段可以正常工作。
但是,如果我运行的命令不会立即产生任何输出,我什么也不会返回,SSH
会断开连接。
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();
}
}
答案 0 :(得分:1)
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);
}