Python
Python - subprocess, Popen, call차이, 작업경로(WorkDirectory) 변경
올엠
2024. 3. 3. 21:32
반응형
Python에서 실행중 추가로 프로그램을 실행해야 하는 경우가 발생할 경우 subprocess 모듈을 이용해서 사용할 수 있다.
아마 이모듈을 사용할 때 가장 많은 찾아보게 되는 부분이 Popen과 Call의 차이 그리고 WorkDirectory 변경일 것 같다.
그럼 핵심만 간단히 정리해 보자.
Popen 과 call의 차이점
Popen과 call의 가장 큰 차이점은 바로 결과를 기다릴 수 있는 구조인가 이다.
실제로 call은 Popen을 감싼 구조라고 할 수 있다. 즉 Popen으로 실행한 프로그램을 실행을 기다렸다가, 실행이 완료되었을 때 결과를 받을 수 있는 것이 call인것이다.

따라서 실행 결과를 기다릴 필요가 없다면, Popen을 사용하고, 실행 결과를 대기하였다가 확인해야 하는 경우 call을 사용해야 한다.
물론 Popen에도 wait 함수를 통해서 실행 결과를 대기하여 확인 할 수 있다.
returncode = call(*args, **kwargs)
returncode = Popen(*args, **kwargs).wait()
WorkDirectory 변경
다음은 현재 실행 위치를 변경하는 것이다.
특정 프로그램을 실행할 때 프로그램의 경로에 따라 읽어드리는 모듈이나 상대 파일의 경로가 달라지기 때문에 프로그램의 실행경로인 WorkDirectory는 매우 중요하다. Python3 부터는 cwd라는 옵션을 통해 프로그램의 실행 경로를 설정할 수 있다.
>>> subprocess.call(["ls"], cwd="/Users/")
반응형