2013-08-26 26 views
6

Ho un sistema di visione artificiale che funziona in Matlab. Quando rileva qualcosa, voglio dire a Python che l'ha trovato. Solo sì o no senza alcuna informazione aggiuntiva, ma il sistema funziona in loop infinito, quindi voglio che Python segua costantemente Matlab in qualche modo.Comunicazione tra Python e Matlab

Mi chiedo quale sia il modo più semplice per farlo.

Ad esempio, Matlab può creare un file su un desktop che Python vedrà e attiverà in base alle funzionalità.

+0

La cosa del file sarebbe probabilmente la più semplice. U potrebbe creare questo file in ramdisk o almeno su SSD per una scrittura/lettura più veloce. Dipende da quanto spesso cambia. – Marcin

+0

Che ne dici di pipe stdout dell'applicazione MATLAB in Python e analizzarlo lì? – moooeeeep

+1

@BranAlgue: dai un'occhiata a questo approccio: http://stackoverflow.com/a/10964190/97160, utilizza il file system per notificare a Python un evento innescato in MATLAB – Amro

risposta

4

Il processo Matlab esce con un particolare codice di uscita se trova qualcosa? Basta usare il codice di uscita in quel caso. Oppure, basta che il processo di Matlab scriva un file con il suo output, e quindi puoi creare un watcher in python per rilevare le modifiche nel file.

Il modo più semplice per ottenere Matlab è anche creare un file vuoto (oltre al file di output stesso) quando trova qualcosa. Poi si può solo continuare a controllare se il file esiste a intervalli regolari utilizzando os.path.exists() e 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") 

Se non è possibile modificare lo script MATLAB, allora si può dare un'occhiata a mlabwrap, che è un modulo attraverso il quale è possibile chiama MATLAB attraverso Python. Vedi anche this answer.

+0

No, non esce. Quale libreria Python dovrei usare per tracciare il file di testo? –

+0

Puoi semplicemente fare in modo che Matlab crei un file vuoto ogni volta che trova qualcosa. In python, continua a cercare quel file con un po 'di tempo di sospensione. (anche la risposta modificata per includere questo) –

+0

@ Raze2dust: ci sono modi migliori di quelli occupati: in attesa di eseguire il polling per le modifiche al file system. Vedi il mio [commento] (http://stackoverflow.com/questions/18435546/communication-between-python-and-matlab#comment27104176_18435546) sopra – Amro

7

Se hai bisogno di una comunicazione costante e veloce ti suggerisco di creare la tua applicazione Python listen on a specific port e connect to that port from MATLAB. È quindi possibile scambiare informazioni in entrambe le direzioni.

+0

È una soluzione interessante. Queste soluzioni hanno vantaggi rispetto alla comunicazione dei file? –

+1

@BranAlgue: I principali vantaggi sono la velocità (nessun disco coinvolto) e la portabilità (funziona su tutti i sistemi operativi, Python e MATLAB possono essere eseguiti su computer diversi). Tuttavia, è anche più complesso da implementare, quindi l'approccio ottimale dipende dal tuo particolare caso d'uso. –

+0

Funziona come un incantesimo ma bisogna stare attenti con il numero di byte inviati e ricevuti, altrimenti le cose si incasinano. – karttinen