Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从长时间运行的SSH命令将SSH输出获取到StreamReader_C#_.net_Ssh - Fatal编程技术网

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);
        }

谢谢,我现在得到了预期的结果。