2012-10-08 2 views
4

저는 파이썬의 subprocess.call()을 사용하여 각각이 Matlab 스크립트를 실행하는 일련의 파이썬 스크립트를 실행하고 있습니다. 첫 번째 Matlab 스크립트가 끝나면 문제가 발생합니다.왜 파이썬은 파이썬 서브 프로세스 종료시 멈 춥니 까?

외부 Python 스크립트는 csv 파일의 각 행을 기반으로 실험을 실행하도록 설정하기 위해 csv 파일의 디렉토리를 구문 분석합니다. 각 실험마다 파이썬 프로그램을 호출하여 데이터를 파싱하고 Matlab에 피드를 실행합니다. Matlab은 각 실험을 실행합니다. 단, MATLAB을 처음 실행 한 후에는 전체가 종료됩니다. Matlab이 하위 프로세스를 종료하면 전체 작업이 중단 될 수 있습니까?

for line in csvfile: 
     if debug: 
      print 'Experiment %d' % count 

     ts = line.split(',') 
     startStamp=ts[0] 
     cmdargs = ['python prep_lssvm.py'] 
     cmdargs.append(str(site)) 
     cmdargs.append(str(startStamp)) 
     cmdargs.append(str(daysTraining)) 

     if debug: 
      print cmdargs 

     for i in range(len(argv)-2): 
      cmdargs.append(str(argv[i+2])) 

     command = ' '.join(cmdargs) 

     if debug: 
      print command 

     call(command,shell=True) 
     #Never goes past here<<<<<<======================= 
     dirname = ''.join([site,'_',str(count)]) 
     mkdir(dirname) 
     call(''.join(['mv ',site,'/*.txt ',dirname]),shell=True,stdout=outfile) 
+0

'call (command, shell = True) '행에서'shell = True'를 사용하는 특별한 이유 – avasal

+0

예외가 있습니까? –

+0

이것은 분명히 재연 해 보였지만 명령을 호출 한 직후 (그리고 바로 직전에)'print' 문을 써서 프로세스가 종료되는 행이라는 사실을 알 수 있었습니까? –

답변

0

나는 고무 오리 디버깅을 통해이를 해결 한 것 같습니다.

동기식으로 실행되는 call() 대신 비동기 적으로 실행되는 Popen()을 통해 MATLAB 스크립트를 호출했습니다. Popen의 모든 인스턴스를 호출하면 문제가 해결 된 것으로 보입니다.

관련 문제