반응형
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 방지)
- 더 세밀한 제어가 가능 (타임아웃, 환경변수 등)
- 에러 처리가 용이함
반응형
'Python' 카테고리의 다른 글
Python으로 쉘 명령어 장기간 실행 행현상시 타임아웃 걸어 프로세스 강제 종료 (0) | 2016.07.25 |
---|---|
Python Logging (파이썬 로깅) (0) | 2016.07.23 |
python 에서 현재 로그인된 유저이름 가져오기 (0) | 2016.07.20 |
Python 학습 참조 사이트 (0) | 2015.11.05 |
Python 실습을 위한 필수품 virtualenvwrapper (0) | 2015.03.12 |