从另一个python文件调用python文件中的函数

时间:2012-03-18 18:24:23

标签: python controller

我正在尝试从另一个文件调用文件中的函数。我有一个名为client.py的文件。在该文件中有一个名为reset()的函数,它重置客户端。我有另一个文件controller.py,我想从控制器调用client.reset(),这样它就会重置客户端,即应该在客户端而不是控制器中运行。

有没有办法做到这一点?

编辑:

controller.py和client.py作为单独的进程运行。 import方法将函数从另一个模块导入到导入它的文件范围内。这不是我想要的。我想要一个方法,通过该方法,controller.py可以使client.py自行调用reset()。

2 个答案:

答案 0 :(得分:2)

要在子进程之间进行通信,您需要使用inter-process communication中的一些方法,根据评论中的@Sven建议。如果客户端只需要与控制器通信,那么您将需要使用stdin / stdout管道。当你调用subprocess.Popen()时,你会想要包含stdin = PIPE。

答案 1 :(得分:2)

虽然有些人建议通过子进程PIPE与您的进程进行通信,但问题仍然是您的client.py进程需要期待并监听stdin上的数据,以便为其执行操作。目前尚不清楚你的客户在做什么,但也许它真的只是坐在从stdin读取的循环中。

@mfrankli在他的回答中给出了python IPC的一般链接。但更具体地说,您需要在client.py中使用某种类型的侦听实现来为控制器发送消息。以下是一些不同的方法:

  1. xmlrpc - 它非常简单易用。
  2. Zeromqpyzmq bindings:如果您想要更多地控制系统的通信方式,这是一个更强大的选项。您可以使用发布/订阅模式让客户端监听控制器。
  3. 如果您对ZeroMQ路线感兴趣,我实际上有一个简单的项目,使用它创建一个RPC设置:https://github.com/justinfx/pyRpc