[파이썬] subprocess 맥에서 `subprocess` 사용하기

맥에서 Python을 사용하여 외부 프로그램을 실행하거나 서브프로세스를 관리해야 할 때 subprocess 모듈을 사용할 수 있습니다. subprocess 모듈은 Python 프로세스에서 새로운 프로세스를 생성하고, 표준 입출력을 통해 데이터를 전달하며, 프로세스의 상태를 확인하는 데 사용됩니다.

1. 기본 사용법

subprocess 모듈을 사용하기 위해 다음과 같이 import 합니다:

import subprocess

간단한 외부 명령을 실행해 보겠습니다. 아래의 예제는 ls 명령어를 실행하고 그 결과를 출력하는 방법입니다.

result = subprocess.run(['ls'], capture_output=True, text=True)
print(result.stdout)

위의 코드에서 subprocess.run은 주어진 명령어를 실행하고 결과를 반환합니다. capture_output=True는 표준 출력을 캡처하도록 지정하며, text=True는 텍스트 형식으로 결과를 반환하도록 지정합니다. 결과는 result.stdout에 저장되고 출력됩니다.

2. 인자 전달하기

외부 프로그램을 실행할 때 인자를 전달해야 할 경우, subprocess.run의 첫 번째 인자로 명령어와 함께 전달할 인자들을 리스트로 전달합니다. 예를 들어, grep 명령어를 사용해 파일에서 특정 문자열을 검색하는 경우 다음과 같이 작성할 수 있습니다.

result = subprocess.run(['grep', 'hello', 'file.txt'], capture_output=True, text=True)
print(result.stdout)

위의 코드는 file.txt에서 “hello”를 검색하여 결과를 반환합니다.

3. Shell 명령 실행하기

Shell 명령을 실행해야 하는 경우, subprocess.runshell 매개변수를 True로 설정하면 됩니다. 아래의 예제는 echo 명령어를 사용하여 텍스트를 출력하는 방법입니다.

result = subprocess.run('echo hello', shell=True, capture_output=True, text=True)
print(result.stdout)

위의 코드는 “hello”를 출력합니다.

4. 비동기 실행하기

subprocess 모듈은 동기적으로 외부 프로그램을 실행하고 결과를 기다리는 방식 외에도 비동기적으로 실행할 수 있는 기능도 제공합니다. 이를 위해 subprocess.Popen 클래스를 사용할 수 있습니다. 아래의 예제는 외부 프로그램을 비동기적으로 실행하고 그 결과를 처리하는 방법입니다.

process = subprocess.Popen(['ls'], stdout=subprocess.PIPE, text=True)
output, error = process.communicate()
print(output)

위의 코드는 ls 명령어를 비동기적으로 실행하고 결과를 output 변수에 저장하여 출력합니다.

결론

subprocess 모듈을 사용하면 맥에서 Python으로 외부 프로그램을 실행하고 결과를 처리할 수 있습니다. 이 모듈을 사용하여 맥에서 다양한 프로세스 관리 및 외부 명령 실행 작업을 수행할 수 있습니다.