【问题标题】:Communication between Python and MatlabPython与Matlab之间的通信
【发布时间】:2013-08-28 10:28:12
【问题描述】:

我有一些在 Matlab 中工作的计算机视觉系统。当它检测到某些东西时,我想告诉 Python 它找到了它。只是是或否,没有任何附加信息,但系统在无限循环中工作,所以我希望 Python 以某种方式不断跟踪 Matlab。

我想知道最简单的方法是什么。

例如,Matlab 可以在桌面上创建一个文件,Python 将根据功能看到并触发该文件。

【问题讨论】:

  • 文件可能是最简单的。你可以在 ramdisk 或至少在 SSD 上制作这个文件,以便更快地写入/读取。这取决于它改变的频率。
  • matlab 应用程序的管道标准输出到 python 并在那里解析呢?
  • @BranAlgue:看看这个方法:stackoverflow.com/a/10964190/97160,它使用文件系统通知 Python MATLAB 中触发的事件

标签: python matlab ipc


【解决方案1】:

如果您需要持续快速的通信,我建议您将 Python 应用程序设为 listen on a specific portconnect to that port from MATLAB。然后,您可以双向交换信息。

【讨论】:

  • 这是一个有趣的解决方案。与文件通信相比,此解决方案是否具有优势?
  • @BranAlgue:主要优势是速度(不涉及磁盘)和可移植性(适用于所有操作系统,Python 和 MATLAB 可以在不同的计算机上运行)。但是,它的实施也更加复杂,因此最佳方法取决于您的特定用例。
  • 就像一个魅力,但必须小心发送和接收的字节数,否则事情会一团糟。
【解决方案2】:

如果 Matlab 进程发现某些东西,它是否会以特定的退出代码退出?在这种情况下,只需使用退出代码。或者,只需让 Matlab 进程将其输出写入一个文件,然后您可以在 python 中创建一个观察程序来检测文件中的更改。

最简单的方法是让 Matlab 在找到某些内容时也创建一个空文件(除了输出文件本身)。然后您可以使用os.path.exists()time.sleep 定期检查文件是否存在:

import os
import time

path='/path/to/file/created/by/matlab'
while not os.path.exists(path):
    print("Matlab output file still not present. Waiting for 1 s and retrying...")
    time.sleep(1)
print("Matlab process generated output. Now I can do what I want to do")

如果你不能更改matlab脚本,那么你可以看看mlabwrap,这是一个可以通过python调用matlab的模块。另见this answer

【讨论】:

  • 不,它不会退出。我应该使用什么 python 库来跟踪文本文件?
  • 您可以简单地让 Matlab 在找到某些内容时创建一个空文件。在 python 中,只需使用一些睡眠时间继续检查该文件。 (也编辑了答案以包括这个)
  • @Raze2dust:有比忙着等待轮询文件系统更改更好的方法。见我上面的comment
  • @Amro 我知道,这就是我上面所说的观察者的意思。但是OP要求最简单的方法:)
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 2011-08-23
相关资源
最近更新 更多