c# - 从长时间运行的 SSH 命令获取 SSH 输出到 StreamReader
问题描述
我正在尝试从一个长时间运行的SSH
命令中捕获输出,该命令可能需要几秒钟才能在调用后最初产生任何文本输出,并且可能需要一分钟才能完全完成。
如果我发出一个简单的命令来执行,下面的代码片段可以正常工作,例如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();
}
}
解决方案
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);
}
推荐阅读
- google-bigquery - BigQuery 在加入 FULL JOIN + USING 时删除重复的列名
- python - 尝试使用 pyenv install "python version" 时出现“构建失败”错误
- mysql - 同一个表中多个字段的累积不同计数
- java - 使用依赖注解作为创建 bean 的参数
- regex - 如何在awk中解析和替换GPU日志?
- aws-lambda - 使用 aws lambda 函数更改特定角色策略
- python - docker容器中的cpplint行为不端
- wpf - ComboBox SelectedIndex 自动更改
- xml - 找不到匹配项时如何让 XPath 返回占位符默认值?
- python - 如果重复,则返回 Python Pandas 中对应的行值