Python을 개발하다 보면 OS 명령어를 실행해야 하는 경우가 종종 발생합니다. 예를 들어, 파일 시스템 탐색, Git 명령어 실행, 빌드 및 배포 자동화 등을 수행할 때 매우 유용합니다. 이번 포스팅에서는 Python을 활용하여 셸 명령어를 실행하는 다양한 방법을 살펴보겠습니다.
1. 기본적인 os
모듈 활용
Python의 os
모듈은 운영 체제와 상호작용할 수 있도록 해줍니다. 이를 활용하여 현재 작업 디렉토리를 확인하거나, 디렉토리를 변경하고, 파일 목록을 확인할 수 있습니다.
import os
# 현재 작업 디렉토리 확인
print(os.getcwd())
# 디렉토리 변경
os.chdir("/Users/junhoha/Documents/GitHub")
print(os.getcwd())
# 디렉토리 내 파일 목록 확인
print(os.listdir())
위 코드 실행 시, 현재 디렉토리를 확인하고 특정 디렉토리로 이동한 후 해당 위치의 파일 목록을 출력합니다.
주의점: os.chdir("~/Documents/GitHub")
와 같이 ~
(틸다)를 포함한 경로를 사용할 경우, FileNotFoundError
가 발생할 수 있습니다. 이를 해결하려면 os.path.expanduser("~")
를 활용하세요.
os.chdir(os.path.expanduser("~/Documents/GitHub"))
2. os.system()
을 이용한 셸 명령 실행
Python에서는 os.system()
을 이용하여 셸 명령어를 실행할 수 있습니다. 다만, 이 방식은 실행 결과를 직접 받아오지 못하므로 제한적입니다.
os.system('ls') # 현재 디렉토리 내 파일 및 폴더 목록 출력
os.system('git clone git@github.com:hajunho/takeTouch.git') # GitHub 저장소 클론
이 방식은 단순 명령 실행에는 유용하지만, 실행 결과를 처리해야 하는 경우 더 나은 방법이 필요합니다.
3. subprocess
모듈을 활용한 명령 실행
보다 유연한 셸 명령 실행을 위해 subprocess
모듈을 사용하는 것이 좋습니다. subprocess.run()
이나 subprocess.Popen()
을 활용하면 실행 결과를 받을 수도 있습니다.
import subprocess
# 명령어 실행 및 출력 확인
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
주요 옵션:
capture_output=True
: 실행 결과를 캡처하여stdout
,stderr
속성을 통해 접근 가능text=True
: 출력을 문자열로 변환 (Python 3.7 이상)
subprocess.run()
대신 subprocess.Popen()
을 사용하면, 실행 중에도 출력을 실시간으로 확인할 수 있습니다.
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True)
for line in process.stdout:
print(line, end='')
4. 사용자 입력을 받아 실행하기
사용자가 입력한 명령어를 실행하려면 아래와 같이 구현할 수 있습니다.
def execute_command():
command = input("실행할 명령어를 입력하세요: ")
os.system(command)
execute_command()
하지만, 이 방법은 보안상 위험할 수 있습니다. 입력값 검증 없이 os.system()
을 실행하면 악성 명령어가 실행될 가능성이 있기 때문입니다. 따라서 신뢰할 수 없는 입력을 실행하는 것은 권장되지 않습니다.
5. Git 명령어 자동화
Python을 활용하면 Git 명령어를 자동화할 수도 있습니다.
subprocess.run(['git', 'add', '*'])
subprocess.run(['git', 'commit', '-m', 'Auto commit'])
subprocess.run(['git', 'push'])
이러한 방식으로 개발 환경을 자동화하고, 반복적인 Git 작업을 Python 스크립트로 처리할 수 있습니다.
6. make
명령어 실행 및 빌드 자동화
일부 프로젝트에서는 make
명령어를 사용하여 빌드를 수행합니다. Python에서 이를 실행하려면 다음과 같이 하면 됩니다.
subprocess.run(['make', 'install'], check=True)
이 방식은 빌드 자동화 스크립트를 작성할 때 유용하며, CI/CD 환경에서도 활용할 수 있습니다.
결론
Python을 활용하여 운영 체제 명령어를 실행하면 다양한 작업을 자동화할 수 있습니다. os.system()
은 간단한 작업에 유용하지만, 실행 결과를 다뤄야 한다면 subprocess
모듈을 사용하는 것이 좋습니다. 또한, 보안 위험을 고려하여 사용자 입력을 직접 실행하는 코드는 피하는 것이 안전합니다.
이제 Python을 활용하여 보다 효율적인 개발 환경을 구축해보세요!