Renci.SshNet SshStream.Flush不工作
我得到了一个异常错误,因为当我读取ShellStream上的最后一个命令时,即使我用ShellStream.Flush()刷新了流,我也得到了一些旧的输出。
所有这些都是foreach循环的一部分:
//Type ls | wc command
ssh_Shell_Stream.WriteLine(cmd_Ls_Wc);
Thread.Sleep(1000); // Prevents the shell from losing the output if it becomes too slow
string stream = "";
string[] stream_Last_Cmd_Arr;
string stream_Last_Cmd;
string line1;
// Read with a suitable timeout to avoid hanging
while ((line1 = ssh_Shell_Stream.ReadLine(TimeSpan.FromSeconds(2))) != null)
{
// Assign the entire command stream to stream string
stream = stream + line1 + "\n";
Thread.Sleep(1000);
}
// Retrieve only last command output
stream_Last_Cmd_Arr = stream.Split('\n');
stream_Last_Cmd = stream_Last_Cmd_Arr[stream_Last_Cmd_Arr.Length-2];
// Converting to int to later determine if there's more than one folder
int ls_wc_result = Convert.ToInt32(stream_Last_Cmd);
在几次循环后的Convert.ToInt32(stream_Last_Cmd);
期间,我得到了一个异常错误,因为最后一个命令与我实际需要的"ls | wc -l“不一致。这就像我在"ls | wc -l“命令之前抛出的"curl”命令上遇到了流缓冲区。
我的流一直看起来像这样:"bash$ tail -10000 /xxxx/xxx/xxx/xxx/xxx.log > /tmp/xx\xx.root.log\ncurl -T /xx/xxx.x.log ftp://10.10.10.1:21 --user xxx-xxx:xxxx\nbash$ curl -T /xx/xxx.xx.log ftp://1.1.1.1 --user xxxx\xxx-xxxx:xxxxxx\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 1447k 0 0 100 1447k 0 36.2M --:--:-- --:--:-- --:--:-- 37.2M\n"
而在我抛出的命令中,它应该是这样的:"bash$ ls /xxx/xx/xx/ | wc -l\n1\n"
无论如何,我确信在继续执行其他命令之前,我已经暂停了主线程足够长的时间。
除此之外,也许Flush()方法没有正确地清理流缓冲区?
回答开始:得票数 0看起来这可能是一个已知的bug:
我决定使用Dispose()方法删除整个shell,并在每次迭代时创建一个新的shell作为变通方法:
foreach (string SerialNumber in file_Lines)
{
//Creating our ShellStream
var ssh_Shell_Stream = CreateShellStream("checker_Terminal", 80, 80, 1024, 1024, 1024);
// Send the command
ssh_Shell_Stream.WriteLine(cmd1);
//Wait 2 seconds and the type the password
Thread.Sleep(2000);
ssh_Shell_Stream.WriteLine(cmd2);
Thread.Sleep(250);
SSH_Class.Extractor(X, Y, ssh_Shell_Stream);
Thread.Sleep(250);
ssh_Shell_Stream.Dispose();
}
总结 以上是真正的电脑专家为你收集整理的Renci.SshNet SshStream.Flush()不工作的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。