2012-12-19 4 views
5

subprocess 모듈을 통해 작은 MATLAB 스크립트와 Python을 인터페이스하고 있습니다. 다음과 같이 :Python은 MATLAB이 끝나기를 기다리지 않습니다.

cmd='(matlab -nosplash -nodesktop -r "optimizer;quit;")' 
p = subprocess.Popen(cmd,stdin=None,stdout=None,shell=True) 
#subprocess.Popen.wait(p) 
#p.wait() 
print "DONE?" 

"완료"는 MATLAB이 시작되기 전에도 인쇄 중입니다! 내 코드 전체가이 때문에 붕괴되고 있습니다. (I 시작하는 곳이지만, 나는 그것의 사용되지 않는 것을 SO에 읽기)()를 호출 os.system을 사용

  • p.wait()subprocess.Popen.wait를 사용
  • :

    이 나는 ​​노력했다. 둘 다 작동하지 않습니다.

  • 수동 일시 중지를 사용하여 3 분 (MATLAB이 평균적으로 완료하는 데 걸리는 최대 시간) 최고 성병.

무엇이 누락 되었습니까? 나를 위해

+0

MATLAB을 호출 할 때 ASP.NET MVC 페이지에서도 이와 비슷한 일이 발생했습니다. MATLAB에서 특정 함수를 실행하고 있습니까? 아니면 그냥 켜고 싶습니까? – IronMan84

+0

@ IronMan84 NumPy에서 수학 코드 작업을 할 수 없기 때문에 행렬을 CSV 파일로 내보내 MATLAB에서 읽고 컴퓨팅하고 CSV 파일에 대한 응답을 내보내고 Python으로 다시 읽습니다. –

+0

괄호를 제거하면 어떻게됩니까? cmd 주위에 – mgilson

답변

4

작품 미세 :

import subprocess 
retcode = subprocess.call(["matlab", "-nosplash", "-nodesktop", "-r", "quit;"]) 
print "DONE", retcode 

분할 인수 이에 따라, (예를 들어 shell=True 필요를) 당신이 실제로 필요하지 않은 경우에만 옵션을 사용하여 명령, 바로 당신이 후에 어떤 않는 기능을 사용 (call), 즉 전화를 걸어 완료 될 때까지 기다리십시오.

설치에 따라 (http://www.mathworks.com/help/matlab/ref/matlabwindows.html 참조) Matlab은 즉시 종료 될 수있는 방식으로 시작될 수 있습니다. 이를 처리하려면 인수 목록에 "-wait"을 추가하십시오.

+0

아니요. 어느 솔루션도 작동하지 않았습니다. 다른 답변에서 언급했듯이 루프를 제외하고 무한한 시도가 있으며 예외 루프를 계속 입력하고 있습니다. –

+0

"except loop"를 입력 하시겠습니까? 그게 뭐야? 나는 당신이 예외 블록의 형태로 뭔가를 가정하고, 다음 matlab을 시작하는 몇 가지 오류가 보인다. – mmgp

+0

아니, 나는 의미했다. 나는 다음과 같은 것을 가지고있다 : try : matlab 명령. 제외 : 1 초 동안 수면을 계속하십시오. 내가하는 일과 관계없이 예외 블록을 계속 입력합니다. –

0

내 의견에 대한 귀하의 답변을 바탕으로, 귀하의 질문에 대한 답변을 드릴 수 있습니다. 귀하의 질문 (C#에도 불구하고)은 귀하의 신청과 유사합니다. 프로세스가 MATLAB이 끝날 때까지 기다리지 않고 (분명히 지금은 작동하지 않음), CSV 파일이 기록 될 때까지 기다리십시오. 중복 가능성이 염려되는 경우 현재 날짜와 시간을 파일 끝에 추가하면 트릭을 수행해야합니다.

+0

그건 내 해결책이야. 파일이 나타날 때까지 기다리는 무한 루프. –

4

Matlab을 "-wait"플래그로 시작하십시오. 문서에서 :

"MATLAB은 일반적으로 MATLAB을 시작한 다음 별도의 시작 프로그램으로 시작한 다음 즉시 종료합니다.이 옵션을 사용하면 MATLAB이 종료 될 때까지 종료하지 않도록 시작 프로그램에 알립니다.이 옵션은 처리해야 할 때 유용합니다. 스크립트에서 MATLAB의 결과.이 옵션으로 MATLAB을 호출하면 결과가 생성 될 때까지 스크립트가 계속 차단됩니다. "

관련 문제