Python和Matlab之间的通信

6

我有一个在Matlab中运行的计算机视觉系统。当它检测到某些东西时,我想告诉Python它找到了什么。只需要简单的“是”或“否”,不需要额外的信息,但该系统在无限循环中工作,因此我希望Python能够跟踪Matlab。

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

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


文件操作可能是最简单的。您可以将此文件制作在Ramdisk中或至少在SSD上进行更快的读写。这取决于它有多频繁更改。 - Marcin
将Matlab应用程序的标准输出管道传输到Python中,然后在那里解析它怎么样? - moooeeeep
1
@BranAlgue:看一下这个方法:http://stackoverflow.com/a/10964190/97160,它使用文件系统来通知Python在MATLAB中触发的事件。 - Amro
2个回答

7
如果您需要不间断且快速的通讯,我建议您让Python应用程序监听特定端口并从MATLAB连接到该端口。这样,您可以在两个方向上交换信息。

这是一个有趣的解决方案。这个解决方案是否比文件通信有优势? - Sergey Ivanov
1
@BranAlgue:主要优点是速度快(无需磁盘)和可移植性强(适用于所有操作系统,Python 和 MATLAB 可以在不同的计算机上运行)。然而,它的实现也更加复杂,因此最佳方法取决于您特定的用例。 - Florian Brucker
运行得很好,但必须小心发送和接收的字节数量,否则会出现问题。 - karttinen

4

如果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库来跟踪文本文件? - Sergey Ivanov
你可以让Matlab在发现某些内容时简单地创建一个空文件。在Python中,只需使用一些睡眠时间不断检查该文件即可。(还编辑了答案以包括这一点) - Hari Menon
@Raze2dust:轮询文件系统变化的方式有比忙等待更好的方法。请查看我在上面的[评论](https://dev59.com/xHbZa4cB1Zd3GeqPBxhQ#-JnknYgBc1ULPQZFOHVm)。 - Amro
@Amro 我知道,这就是我上面所说的观察器的意思。但是OP问的是最简单的方法 :) - Hari Menon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接