为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
holdtom 2023-09-16 15:53:56
我正在我的计算机上用 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());    }}
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

SSH.NETSshClient.CreateCommand不使用终端模拟。

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

为了防止缓冲,请将-u开关添加到python命令行:

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



查看完整回答
反对 回复 2023-09-16
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

如果您希望本地主机上的远程程序的输出,则远程程序(“test.py”)必须与本地主机通信。然后,运行 C# 程序的本地主机可以在从 RPi 收到消息时打印一些内容。通常,在 RPi 上启动 test.py 后,您可以向本地主机发送一条消息,例如“Started”或“0”,或任何您想要的消息。

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


查看完整回答
反对 回复 2023-09-16
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信