본문 바로가기
Python

Python - subprocess, Popen, call차이, 작업경로(WorkDirectory) 변경

by 올엠 2024. 3. 3.
반응형

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/")
 

 

반응형