나는 subprocess.Popen으로 백그라운드에서 matlab 함수 sussum (a, nx, ny)을 실행하는 파이썬 코드를 가지고있다. 나는 그것을 작동시킬 수 없다. 왜냐하면 나는 matlab에 입력 인수를 올바르게 전달할 수 없기 때문이다. 여기 파이썬 코드 :는 오류 메시지 뱉어까지파이썬 서브 프로세스로 matlab 함수 호출하기 .Popen
#!/usr/bin/env python
import matlab.engine
import scipy.io as sio
import numpy as np
import subprocess as sb
nproc = 5
input = sio.loadmat('sus_py.mat')
totq = input['totq']
nx,ny = input['nx'],input['ny']
nq = totq+1
nx,ny = matlab.int32(nx.tolist()) , matlab.int32(ny.tolist())
iq = range(1,nq)
gp = len(iq)/nproc
list = [iq[j:j+nproc] for j in range(0,len(iq),nproc)]
for g in range(0,len(list)):
i = len(list[g])
p = []
for n in range(0,i):
a = matlab.int32(list[g][n])
fun = '-r "sussum(a,nx,ny); exit" '
lmb = ['/usr/local/bin/matlab','-nodesktop','-nosplash','-nodisplay','-nojvm',fun]
p.append(sb.Popen(lmb))
for q in p:
q.wait()
Python 스크립트는 클러스터 네트워크의 명령 단자에서 실행 : 정의되지 않은 함수 또는 'A'변수.
나는 matlab.engine.start_matlab(). sussum (a, nx, ny)와 같이 Python-Matlab API를 사용하여 matlab 함수 sussum (a, nx, ny)이 제대로 작동한다고 확신한다. 원하는 출력을 주었다. subprocess.Popen()을 사용하여 파이썬 코드를 실행하는 데 도움이 될 것입니다.
변수 값을 함수로 전달하지 않고 Popen을 호출 할 때 "sussum (a, nx, ny)"문자열을 쉘 매개 변수로 효과적으로 작성합니다. 쉘에 lmb 동사를 입력 한 것과 같지만 변수의 값에 대한 개념이 없습니다. 이런 식으로 함수를 호출하고자한다면 변수의 이름보다는 숫자를 전달하기 위해 numpy 행렬에서 Matlab 문법으로 변환해야합니다. – TWReever
@TWReever : 이것을 답으로 사용해야합니다 – TheBlackCat