Renci.SshNet SshStream.Flush不工作

教育网编2023-04-07 16:152000
提问开始:

我得到了一个异常错误,因为当我读取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()不工作的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。

评论区