맥에서 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.run
의 shell
매개변수를 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으로 외부 프로그램을 실행하고 결과를 처리할 수 있습니다. 이 모듈을 사용하여 맥에서 다양한 프로세스 관리 및 외부 명령 실행 작업을 수행할 수 있습니다.