【问题标题】:Remotely sending inputs to a running Python script将输入远程发送到正在运行的 Python 脚本
【发布时间】:2017-07-25 04:56:19
【问题描述】:

我会尽量清楚自己的目标。 我的 Raspberry Pi 上有一个正在运行的 Python 脚本,我希望 多个用户 将输入远程发送到脚本(通过 SSH 或其他可能更好的方法)。 例如,如果我运行这个脚本:

Name = input ("Please type in your name. \n")
type (Name)
print ("Hello there" , Name)
time.sleep(3) # Pause for 3 seconds.

我希望用户从与 Raspberry Pi 连接到同一网络的设备远程向此脚本发送名称。

如果可能,我还想实现以下功能:

  • 将输出(也称为打印文本)发送回输入来源的特定设备。

  • 排队系统:如果多个用户同时发送姓名,脚本将按顺序依次取姓名。

我知道有很多要求,但如果有人能通过为我指明正确的方向来帮助我开始这件事,我将不胜感激。我在过去的几天里我已经搜索了很多,但我还没有真正找到任何适合我需要的东西。

编辑:我在 PYTHON 3 上运行它

【问题讨论】:

  • 如果您解释一下您的脚本的用途以及您想象它如何处理多个并发用户,这将有所帮助。
  • @IrmendeJong - 脚本很长,为这个问题发布所有内容是不切实际的。但基本上,该脚本将从用户 (Name) 获取输入并将输出 ("Hello there Irmen") 发送回这些用户。至于并发性,我希望我能找到一种方法将所有名称排队在类似缓冲区的系统(或列表)中,Python 脚本将通过名称缓冲区并一个接一个地发送回输出。含义:如果 A、B 和 C 同时发送他们的名字,脚本会先取 A,发送输出,暂停 3 秒,然后移动到 B,然后移动到 C。这说明清楚了吗?
  • 我很抱歉,但不,不是真的 - 这或多或少是改写你原来的问题。我一直在寻找脚本如何执行的详细信息,例如:您是否有服务器,它是作为长时间运行的服务器进程执行还是可能通过其他方式调用,它如何与外界对话,例如仅从标准输入读取,或者您是否能够处理网络连接。
  • @IrmendeJong - 脚本在 Raspberry Pi 上运行,因此可以用作服务器。该脚本只是在 Raspberry 启动时启动。至于它是如何与外界沟通的……嗯,这就是我遇到的麻烦。除非我通过 SSH 连接到 Raspberry,否则我无法真正将数据输入到脚本中,也无法接收其输出。我使用标准输入有一段时间将发送到终端(通过 SSH)的命令转发到脚本。但这被证明是低效的,我希望找到一种与脚本直接进行通信的方法。
  • 我很确定我可以处理网络连接。

标签: python raspberry-pi


【解决方案1】:

您希望(通过网络)直接与脚本交流的评论打开了一个充满可能性的世界。不过,您必须稍微修改一下 Python 脚本,因为它不再通过 stdin/stdout 进行通信。

我仍然不完全确定您希望事情如何工作,但在我看来,基于 RPC 的解决方案可能适合您。我可以建议你看看Pyro4吗?基本上,这对您所做的就是使您能够通过网络进行正常的 Python 方法调用,以在另一台计算机上运行代码。

因此,您可以在您的 Pi 上设置一个服务器(需要连续运行),该服务器接受来自其他计算机的远程调用,然后可以在 pi 上调用您的 python 代码。它可以并行或按顺序处理调用。你没有说你是否需要任何形式的安全,但提供了一些基本的安全功能(还没有内置加密或通过 TLS 进行通信,抱歉)。

A simple example is here 以及更多在 github 上,您可以看看这是否符合您的要求?

另一个不需要第三方库的解决方案可能是编写一个WSGI http 服务器来调用您的脚本,在 pi 上运行它,然后从您的其他计算机通过 HTTP 访问它。

【讨论】:

  • 太棒了!我什至不知道有这样的图书馆。看来你是开发它的人,所以向你致敬! WSGI Server 功能也令人大开眼界。根据我的阅读,我不确定我是否能够区分多个用户输入(即谁发送了什么),所以我可以发回一个个性化的答案。但我一定会仔细阅读,看看能做些什么!感谢您让我走上正确的道路!
  • 你是对的。此外,Wsgi 服务器解决方案只是在 Python 中创建运行应用程序而不是提供静态页面的 Web 服务器的一种奇特方式,因此,它将来自每个连接的“用户”的数据作为单独的请求处理,每个请求都有自己的上下文
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2021-01-06
  • 1970-01-01
相关资源
最近更新 更多