如何在本地控制台上使用 C# SSH.NET 执行远程主机 (Raspberry Pi) 上的 Python 程序 运行 连续写入输出?

How to continuously write output from Python Program running on a remote host (Raspberry Pi) executed with C# SSH.NET on local console?

我正在我的计算机上用 C# 编写一个程序,它应该在远程 Raspberry Pi 上启动一个 Python 程序。目前 Python 代码每秒打印 'Hello' 。该程序应该 运行 永久。当我从 C# 启动这个程序时,如果我的程序是 运行ning,我希望得到一个视觉反馈——我希望看到像 PuTTY 中那样的打印输出。

以下代码适用于 ls 这样的命令。但是由于我的 Python 程序 test.py 不应该完成——我从来没有得到输出——我陷入了一个连续的循环。

如何实时显示输出?

这是我的代码:

using Renci.SshNet;

static void Main(string[] args)
{
    var ssh = new SshClient("rpi", 22, "pi", "password");
    ssh.Connect();

    var command = ssh.CreateCommand("python3 test.py");
    var asyncExecute = command.BeginExecute();

    while (true)
    {
        command.OutputStream.CopyTo(Console.OpenStandardOutput());
    }
}

如果您想要本地主机上远程程序的输出,远程程序 ("test.py") 将必须与您的本地主机对话。本地主机 运行 你的 c# 程序可以在收到来自 RPi 的消息时打印一些东西。 通常,在 RPi 上启动 test.py 后,您可以向本地主机发送一条消息,例如 "Started" 或“0”,或任何您想要的。

如果您有一个活动的 SSH window 运行 test.py,您可以直接从 RPi 打印到它。

SSH.NET SshClient.CreateCommand 不使用终端仿真。

Python 在没有终端仿真的情况下执行时缓冲输出。所以你最终会得到输出,但只有在缓冲区填满之后。

要防止缓冲,请将 -u switch 添加到 python 命令行:

var command = ssh.CreateCommand("python3 -u test.py");