如何在本地控制台上使用 C# SSH.NET 执行的远程主机 (Raspberry Pi)

我正在我的计算机上用 C# 编写一个程序,该程序应该在远程 Raspberry Pi 上启动 Python 程序。目前,Python 代码只是'Hello'每秒打印一次。该程序应该永久运行。当我从 C# 启动此程序时,如果我的程序正在运行,我希望获得视觉反馈 - 我希望看到像 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());

    }

}


holdtom
浏览 139回答 2
2回答

回首忆惘然

SSH.NETSshClient.CreateCommand不使用终端模拟。在没有终端仿真的情况下执行时,Python 会缓冲输出。所以你最终会得到输出,但只有在缓冲区填满之后。为了防止缓冲,请将-u开关添加到python命令行:var command = ssh.CreateCommand("python3 -u test.py");

至尊宝的传说

如果您希望本地主机上的远程程序的输出,则远程程序(“test.py”)必须与本地主机通信。然后,运行 C# 程序的本地主机可以在从 RPi 收到消息时打印一些内容。通常,在 RPi 上启动 test.py 后,您可以向本地主机发送一条消息,例如“Started”或“0”,或任何您想要的消息。如果您有一个运行 test.py 的活动 SSH 窗口,您可以直接从 RPi 打印到它。
打开App,查看更多内容
随时随地看视频慕课网APP