반응형

Python을 활용한 시스템 명령어 실행 가이드

1. 기본적인 명령어 실행 방법

os 모듈 사용

import os

# 단순 명령어 실행
status = os.system('ls -al')
# 반환값은 명령어 실행 상태 (0: 성공, 非0: 실패)

subprocess 모듈 사용 (권장)

import subprocess

# 기본 실행 방법
result = subprocess.call(['ls', '-al'])

# shell=True 옵션 사용 시
result = subprocess.call('ls -al', shell=True)

2. 시스템 명령어 출력 결과 처리

화면 출력

# subprocess.run 사용 (Python 3.5+)
result = subprocess.run(['ls', '-al'], capture_output=True, text=True)
print(result.stdout)  # 표준 출력
print(result.stderr)  # 오류 출력

# subprocess.Popen 사용
process = subprocess.Popen(['ls', '-al'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()
print(stdout)

파일로 저장

# 직접 파일로 출력 리다이렉션
with open('output.txt', 'w') as f:
    subprocess.run(['ls', '-al'], stdout=f)

# 출력 결과를 받아서 파일로 저장
result = subprocess.run(['ls', '-al'], capture_output=True, text=True)
with open('output.txt', 'w') as f:
    f.write(result.stdout)

3. 고급 기능

타임아웃 설정

try:
    result = subprocess.run(['sleep', '10'], timeout=5)
except subprocess.TimeoutExpired:
    print("명령어 실행 시간 초과")

환경 변수 설정

import os
env = os.environ.copy()
env['MY_VAR'] = 'value'
subprocess.run(['printenv', 'MY_VAR'], env=env)

에러 처리

try:
    result = subprocess.run(['invalid_command'], check=True)
except subprocess.CalledProcessError as e:
    print(f"에러 발생: {e}")

4. 실행 결과 코드 확인

result = subprocess.run(['ls', '-al'])
print(f"Return code: {result.returncode}")  # 0: 성공, 非0: 실패

subprocess 모듈은 os.system()보다 다음과 같은 장점이 있습니다:

  • 출력 결과를 쉽게 캡처할 수 있음
  • 보안상 더 안전함 (shell injection 방지)
  • 더 세밀한 제어가 가능 (타임아웃, 환경변수 등)
  • 에러 처리가 용이함
반응형

+ Recent posts