【问题标题】:How to make two Python programs communicate?如何让两个 Python 程序进行通信?
【发布时间】:2016-03-27 17:43:18
【问题描述】:

我有两个 Python 程序,一个是 IRC 机器人,使用套接字连接到 IRC 服务器。

这个程序有一个循环,从一个特定的通道读取每个 PRIVMSG。

第二个程序应该得到第一个程序输出的任何东西(在这种情况下是 PRIVMSG)并使用它运行函数。

所以,基本上是:

while 1:
    data = irc.recv(2048)
    if data.find("PRIVMSG " + current_channel + " :") != -1:
        send_to_second_program(data)

第二个节目是

while 1:
    data = get_from_first_program()
    do_stuff(data)

有没有办法在不使用模块的情况下实现这一点?这两个程序应该是分开的。

【问题讨论】:

  • 有很多方法可以做到这一点。必须使用您的特殊要求来缩小范围。
  • 如果它们驻留在同一台机器上,请使用modules
  • @SiHa 这就是我现在正在做的事情。不过,我需要它在运行时发生。
  • 请向我们展示一些代码来演示您的问题 - 了解如何编写 minimal reproducible example。目前无法回答您的问题,因为目前还不清楚您真正想要实现什么。你也可能问错了问题:)
  • 如果它们需要是单独的进程,请考虑管道和信号。如果在不同的机器上(也许明天)sockets、rpc、REST...

标签: python sockets irc interprocess


【解决方案1】:

虽然您可以使用数十种方式进行交流,并且您没有提供任何上下文或要求,但我假设您正在从事一个小型项目。我建议您使用 rpc(远程过程调用)。使用 rpc,您可以调用另一个应用程序的 Python 函数,就好像它是本地可用的函数一样。查看一些适用于 Python 的 rpc 库,例如 http://www.zerorpc.io/,这对于您的用例来说似乎绰绰有余。

使用 rpc 有一些缺点,例如,您可以在 this question 的答案中阅读,但如果范围有限,我认为这是实现目标的最简单、非 hack 的方法之一。

【讨论】:

  • 谢谢。我会调查的。
【解决方案2】:

假设两个程序在同一个目录下,可以使用import导入另一个文件

例如,考虑一个文件a.py。要将其导入另一个文件 b.py 使用 import a 然后使用 a.something 访问文件 a.py 中定义的内容

【讨论】:

  • 我现在正在这样做。但是,我需要它在运行时发生。
【解决方案3】:
  1. 通过 JSON(Rest API)。它是面向服务的架构。因此,您可以极大地扩展您的应用程序。
  2. 超过Message queue 也可以扩展,但可靠性不高。

【讨论】:

  • 有一些非常可靠的消息队列。为什么说它们不可靠?
  • 首先,他们发送和接收消息。其次,它们可能是可靠和持久的,也可能不是。这不是它的主要功能。我的意思是,例如,订阅者已关闭(几次),但它跳过了一些消息。这些消息可能会破坏您的逻辑。例如,您可能忘记从账户中给钱。有一个比较好的消息队列stackoverflow.com/questions/731233/…
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多