从另一个python文件调用python文件中的函数
我试图从另一个文件调用文件中的函数。我有一个名为client.py的文件。在那个文件中有一个名为reset()的函数,它重置客户端。我有另一个文件controller.py,我想从控制器调用client.reset(),以便重置客户端,即应该在客户端而不是控制器内运行。从另一个python文件调用python文件中的函数
有没有办法做到这一点?
编辑:
controller.py和client.py作为单独的进程运行。 import方法将另一个模块的函数导入到其导入文件的范围中。这不是我想要的。我想要一个方法controller.py可以使client.py自己调用reset()。
尽管有人建议通过子进程PIPE与进程通信,但问题仍然是client.py进程需要预期并监听stdin上的数据,以便为其执行操作。目前还不清楚你的客户在做什么,但也许它确实只是坐在从标准输入读取循环。
@mfrankli在他的回答中给出了python IPC的一般链接。但更具体的说,你需要在你的client.py中为控制器发送消息的一些类型的监听实现。这里有一些不同的方法:
- xmlrpc - 它非常简单易用。
- Zeromq和pyzmq bindings:如果您想更多地控制系统的通信方式,这是一个更强大的选项。您可以使用发布/订阅模式让您的客户端收听控制器。
如果你有兴趣在ZeroMQ路线,其实我有一个简单的项目创建使用它的RPC设置:https://github.com/justinfx/pyRpc
看来海报的问题的答案取决于客户端在做什么。从问题的评论之一: “用户将与controller.py进行交互...将点击控制器上的重置客户端按钮” 我得到的印象是,客户端本质上是等待输入,然后作用于它。但是,在一般情况下,您的答案可能是SO上更好的资源IPC。 – mfrankli 2012-03-18 19:13:20
@mfrankli:我同意。他的问题非常模棱两可,这就是为什么我认为别人甚至不打算写答案。我们现在只能假设。 Ya,他可能正在使用他的控制器运行某种类型的GUI框架。如果他偶然使用PyQt,那么我的pyRpc工具将立即为他提供一个示例:-) – jdi 2012-03-18 19:24:37
@jdi我的客户(两个分离进程)是寻路模拟器。用户将选择算法(与每个客户端不同),控制器上的模拟速度等,我打算发送给各个客户端。另外我希望他们在同一时间开始模拟。你有任何关于xmlrpc的教程吗? – AccurateEstimate 2012-03-18 19:26:45
要在子流程之间进行通信,您需要按照@ Sven在注释中的建议使用inter-process communication中的一些方法。如果客户端只需要与控制器进行通信,那么您将需要使用stdin/stdout管道。当你调用subprocess.Popen()时,你需要包含stdin = PIPE。
我应该注意到,我不是专家,但我已经使用了它,它的工作,afaik – mfrankli 2012-03-18 18:50:13
你通过一个Python教程/书走向何方?任何体面的人都应该在关键字“模块”下加以说明。 – delnan 2012-03-18 18:26:49
“内部运行”是什么意思?这里显而易见的解决方案是导入客户端,并从控制器调用client.reset(),但似乎这不是你想要的? – mfrankli 2012-03-18 18:26:57
你有两个不同的进程,从'controller.py'和'client.py'开始? – 2012-03-18 18:26:59