python subprocess 관련 질문입니다 .

조회수 387회
cmd1  = "sed 's/tmp_lig/" + output_file + "/g'  runFR.sh > runFR_tmp_" + str(while_cnt) + "_" + str(compoundIdx) + ".sh"
proc = subprocess.call( cmd1 , shell=True)

cmd2  = "nohup bash runFR_tmp_" + str(while_cnt) + "_" + str(compoundIdx) + ".sh 1> ADRF.log 2>&1 &"
proc = subprocess.call( cmd2, shell=True)

#----find the minimum score of FR 
fi = open('tmp_lig_' + str(while_cnt) + '_' + str(compoundIdx) + '_rigid_summary.dlg', 'r').readlines()

안녕하세요. 위와 같은 코드에서 subprocess.call을 이용하여 cmd2을 실행합니다. 여기서 제가 미리 짜논 bash script을 수행하고 되고 결과 파일을 열어 원하는 정보를 취하려고 합니다.

그런데 문제점은 계산이 먼저 끝나서 결과 파일이 먼저 나오면 상관 없지만, subprocess 특성상(?) 또 다른 shell을 실행하는 것이므로 계산이 끝나지 않았는데도 결과 파일을 읽으려는 코드 라인이 실행됩니다. 따라서 아래와 같은 오류가 발생하게 됩니다. fi = open('tmp_lig_' + str(while_cnt) + '_' + str(compoundIdx) + '_rigid_summary.dlg', 'r').readlines() IOError: [Errno 2] No such file or directory: 'tmp_lig_5_2_rigid_summary.dlg'

혹시 subprocess로 실행한 다른 shell의 동작이 끝나야 파이썬 script의 다음 라인을 실행하게 하는 방법이 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • fi가 너무 빨리 실행되는게 문제라면 cmd1과 cmd2를 함수 안에 집어넣고, 해당 함수가 종료되면 fi를 실행하게 하면 되지 않을까 생각됩니다. 초보자 2021.2.2 17:58
  • async/await 코루틴 있어요 파이썬도 김호원 2021.2.3 09:15
  • 아 subprocess에도 async/await를 사용할 수 있군요. 공부해야겠습니다. 감사합니다. :) 알 수 없는 사용자 2021.2.3 14:44
  • python2.7 에서도 될지 모르겠지만 https://docs.python.org/3/library/asyncio-subprocess.html 참고해주세용 김호원 2021.2.3 17:56

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)