2013-08-26 4 views
6

Matlab에서 작동하는 컴퓨터 비전 시스템이 있습니다. 그것이 뭔가를 발견했을 때 나는 그것을 발견했다고 파이썬에게 말하고 싶다. 추가 정보없이 예 또는 아니오,하지만 시스템은 무한 루프에서 작동하므로 파이썬이 Matlab을 어떻게 든 추적하고 싶습니다.Python과 Matlab 간의 통신

가장 쉬운 방법은 무엇일까요?

예를 들어, Matlab은 Python이 기능에 따라보고 트리거하는 파일을 데스크탑에 만들 수 있습니다.

+0

파일이 가장 쉽습니다. U는이 파일을 램 디스크로 만들거나 SSD를 통해 쓰기/읽기를 더 빠르게 할 수 있습니다. 얼마나 자주 변경되는지에 따라 다릅니다. – Marcin

+0

파이썬에 대한 MATLAB 응용 프로그램의 파이프 stdout은 무엇입니까? – moooeeeep

+1

@BranAlgue :이 접근법을 살펴보십시오 : http://stackoverflow.com/a/10964190/97160, 파일 시스템을 사용하여 Python에 MATLAB에서 트리거 된 이벤트를 알립니다. – Amro

답변

4

뭔가 발견되면 Matlab 프로세스가 특정 종료 코드로 종료합니까? 이 경우 종료 코드 만 사용하십시오. 아니면 Matlab 프로세스가 출력물을 가진 파일을 작성하게하고 파이썬에서 파일의 변경을 감지하는 감시자를 만들 수 있습니다.

가장 간단한 방법은 Matlab이 무언가를 찾았을 때 빈 파일 (출력 파일 자체 외에)을 생성하도록하는 것입니다. 파일이 os.path.exists()time.sleep 사용하여 정기적으로 존재하는 경우 다음 당신은 그냥 계속 확인 할 수 있습니다 당신은 MATLAB 스크립트를 변경할 수없는 경우

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") 

을, 당신은 모듈이 mlabwrap 한 번 봐 걸릴 수있는 당신이 할 수있는을 통해 파이썬 통해 matlab를 호출합니다. 또한 this answer을 참조하십시오.

+0

아니요, 종료되지 않습니다. 파이썬 라이브러리를 사용하여 텍스트 파일을 추적해야합니까? –

+0

Matlab은 뭔가를 발견 할 때마다 빈 파일을 간단하게 만들 수 있습니다. 파이썬에서는 잠자기 시간에 파일을 계속 확인합니다. (이것도 포함하여 편집 된 답변) –

+0

@ Raze2dust : 파일 시스템 변경 사항을 폴링하기 위해 바쁜 대기보다 나은 방법이 있습니다. 내 [코멘트] (위의 http://stackoverflow.com/questions/18435546/communication-between-python-and-matlab#comment27104176_18435546)를 참조하십시오. – Amro

7

당신이 일정하고 빠른 의사 소통을 필요로한다면 나는 당신이 파이썬 응용 프로그램 listen on a specific portconnect to that port from MATLAB을 만들 것을 제안 할 것이다. 그런 다음 양방향으로 정보를 교환 할 수 있습니다.

+0

그것은 흥미있는 해결책이다. 이 솔루션은 파일 통신에 비해 이점이 있습니까? –

+1

@BranAlgue : 주요 이점은 속도 (디스크 관련 없음) 및 이식성 (모든 OS에서 작동, Python 및 MATLAB은 다른 컴퓨터에서 실행 가능)입니다. 그러나 구현하기가 더 복잡하기 때문에 최적의 접근 방식은 특정 사용 사례에 따라 다릅니다. –

+0

매력처럼 작동하지만 보내고받은 바이트 수에주의해야합니다. 그렇지 않으면 상황이 엉망이됩니다. – karttinen