2013-08-26 32 views
6

Mam komputerowy system wizyjny, który działa w Matlabie. Kiedy wykryje coś, chcę powiedzieć Pythonowi, że go znalazł. Po prostu tak lub nie bez żadnych dodatkowych informacji, ale system działa w nieskończonej pętli, więc chcę, aby Python stale śledził Matlab.Komunikacja między Pythonem i Matlabem

Zastanawiam się, jaki jest najprostszy sposób to zrobić.

Na przykład Matlab może utworzyć plik na pulpicie, który zobaczy i uruchomi Python zgodnie z funkcjonalnością.

+0

Plik byłby prawdopodobnie najłatwiejszy. U może zrobić ten plik w ramdysku lub przynajmniej na SSD dla szybszego pisania/czytania. Zależy jak często się zmienia. – Marcin

+0

Co ze stdoutem potokowym aplikacji Matlab do Pythona i tam go parsować? – moooeeeep

+1

@BranAlgue: spójrz na to podejście: http://stackoverflow.com/a/10964190/97160, używa systemu plików do powiadamiania Pythona o zdarzeniu wywoływanym w MATLAB – Amro

Odpowiedz

4

Czy proces Matlab kończy działanie z określonym kodem wyjścia, jeśli coś znajdzie? Po prostu użyj kodu wyjścia w takim przypadku. Albo po prostu spraw, aby proces Matlaba zapisał plik z danymi wyjściowymi, a następnie możesz utworzyć watcher w pythonie, aby wykryć zmiany w pliku.

Najprostszym sposobem jest przekonanie Matlaba do utworzenia pustego pliku (oprócz samego pliku wyjściowego), gdy coś znajdzie. Następnie można po prostu zachować sprawdzenie, czy plik istnieje w regularnych odstępach czasu za pomocą os.path.exists() i 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") 

Jeśli nie można zmienić skrypt Matlab, można spojrzeć na mlabwrap, który jest modułem, przez które można call matlab przez python. Zobacz także this answer.

+0

Nie, to nie wychodzi. Jakiej biblioteki Pythona powinienem używać do śledzenia pliku tekstowego? –

+0

Możesz łatwo mieć Matlab utworzyć pusty plik, gdy coś znajdzie. W python, po prostu sprawdzaj ten plik z pewnym czasem uśpienia. (również edytowana odpowiedź na to) –

+0

@ Raze2dust: istnieją lepsze sposoby niż oczekiwanie na pobieranie w poszukiwaniu zmian systemu plików. Zobacz mój [komentarz] (http://stackoverflow.com/questions/18435546/communication-between-python-and-matlab#comment27104176_18435546) powyżej – Amro

7

Jeśli potrzebujesz stałej i szybkiej komunikacji, proponuję utworzyć aplikację Python listen on a specific port i connect to that port from MATLAB. Następnie możesz wymieniać informacje w obu kierunkach.

+0

To interesujące rozwiązanie. Czy te rozwiązania mają przewagę nad komunikacją plików? –

+1

@BranAlgue: Główne zalety to szybkość (brak dysku) i przenośność (działa na wszystkich systemach operacyjnych, Python i MATLAB można uruchomić na różnych komputerach). Jednak implementacja jest bardziej skomplikowana, więc optymalne podejście zależy od konkretnego przypadku użycia. –

+0

Działa jak zaklęcie, ale musi być ostrożny z liczbą wysłanych i odebranych bajtów, w przeciwnym razie rzeczy się popsują. – karttinen