-
[Python] sys 표준 라이브러리: 인터프리터, 경로, 입출력 제어업무 자동화/Python 2025. 11. 29. 09:36

1. sys 모듈은 무엇인가?
1-1. 정의
sys는 파이썬 인터프리터 자체와 관련된 각종 정보와 기능을 제공하는 표준 라이브러리입니다.- 대표적으로 아래와 같은 기능을 제공합니다.
- 실행 인자 접근 (
sys.argv) - 종료 코드 반환 (
sys.exit) - 모듈 검색 경로 (
sys.path) - 표준 입출력 스트림 접근 (
sys.stdin,sys.stdout,sys.stderr) - 버전, 플랫폼, 기본 인코딩 등 환경 정보 조회
- 실행 인자 접근 (
1-2. 설치는 필요할까? (Windows / Linux 공통)
sys는 파이썬에 기본 내장된 모듈로, 따로 설치할 필요가 없습니다.- 어느 OS에서나 다음처럼 바로 import 해서 사용합니다.
import sys print(sys.version)2. 커맨드라인 인자 처리: sys.argv
스크립트를 CLI(커맨드라인)에서 실행할 때 인자를 전달받는 기본적인 방법입니다.
python myscript.py input.csv output.csv# myscript.py import sys print(sys.argv)실행 결과 예시:
['myscript.py', 'input.csv', 'output.csv']sys.argv[0]: 스크립트 이름sys.argv[1]이후 : 사용자가 전달한 인자
2-1. 간단한 예시: 입력 파일과 출력 파일 받기
# csv_copy.py import sys import shutil if len(sys.argv) != 3: print("사용법: python csv_copy.py <입력파일> <출력파일>") sys.exit(1) src = sys.argv[1] dst = sys.argv[2] shutil.copy(src, dst) print(f"{src} -> {dst} 복사 완료")- CLI 도구를 만들 때,
sys.argv만으로도 간단한 인자 처리가 가능합니다. - 더 복잡한 인자 처리는
argparse와 함께 쓰는 것이 좋습니다.
3. 프로그램 종료와 종료 코드: sys.exit
3-1. 정상 종료 / 비정상 종료
import sys if some_error_condition: print("에러 발생, 종료합니다.") sys.exit(1) # 0이 아닌 값은 보통 '실패' 의미 # 정상 종료 sys.exit(0)sys.exit()를 호출하면SystemExit예외를 발생시키면서 프로그램을 종료합니다.- 관례상
0: 성공1이상 : 실패/에러
- 종료 코드는 셸/다른 프로세스에서 확인할 수 있습니다.
3-2. try/except와 함께 사용
import sys try: # 처리 코드 ... except Exception as e: print("예상치 못한 에러:", e) sys.exit(1)- 스크립트를 다른 시스템에서 호출할 때, 종료 코드를 기준으로 성공/실패 판단이 가능합니다.
4. 모듈 검색 경로: sys.path
파이썬이
import할 수 있는 모듈을 어디서 찾는지 나타내는 리스트입니다.import sys for p in sys.path: print(p)- 요소 예시
- 현재 프로젝트 디렉터리
- 표준 라이브러리 경로
- site-packages 디렉터리 등
4-1. 동적으로 경로 추가하기 (주의해서 사용)
import sys from pathlib import Path extra = Path(__file__).parent / "libs" sys.path.append(str(extra)) import my_local_lib # libs 폴더 아래에 있는 모듈- 테스트용/간단 스크립트에서는 유용하지만,
- 대형 프로젝트에서는 패키지 구조를 재정리하거나, 가상 환경 + 설치 방식을 추천합니다.
5. 표준 입출력 스트림: stdin, stdout, stderr
5-1. 기본 개념
sys.stdin: 표준 입력 (보통 키보드, 또는 파이프 입력)sys.stdout: 표준 출력 (화면에 보이는 출력)sys.stderr: 에러 출력 (로그/에러 메시지 전용)
import sys sys.stdout.write("일반 메시지\n") sys.stderr.write("에러 메시지\n")5-2. 파이프와 함께 사용하기
예를 들어, 다른 명령어 출력 결과를 파이썬으로 읽어 처리할 수 있습니다.
cat data.txt | python process.py# process.py import sys for line in sys.stdin: line = line.strip() if not line: continue print("처리:", line)- 셸 스크립트/파이프라인 안에서 유연하게 연결할 수 있습니다.
6. 파이썬 버전과 환경 정보
6-1. sys.version, sys.version_info
import sys print(sys.version) # 전체 버전 문자열 print(sys.version_info) # (major, minor, micro, ...) 튜플예시:
3.11.2 (main, ...) [GCC 11.2.0] sys.version_info(major=3, minor=11, micro=2, releaselevel='final', serial=0)버전에 따라 다른 코드를 실행할 수도 있습니다.
import sys if sys.version_info < (3, 10): print("Python 3.10 이상에서 동작하는 기능이 필요합니다.") sys.exit(1)6-2. sys.platform
import sys print(sys.platform)- 예시 값
- "win32" : Windows
- "linux" : Linux
- "darwin" : macOS
간단한 OS 분기에 사용할 수 있습니다.
import sys from pathlib import Path if sys.platform == "win32": base = Path("C:/data") else: base = Path("/data") print("기준 폴더:", base)7. 메모리 관련 / 한계 설정 유틸
7-1. sys.getsizeof()
파이썬 객체의 대략적인 메모리 사용량(바이트) 을 반환합니다.
import sys data = [1, 2, 3, 4, 5] print(sys.getsizeof(data)) # 리스트 객체 자체 크기 print(sys.getsizeof(data[0])) # 원소 하나의 크기- 정확한 전체 메모리 사용량은 아니지만, 상대적인 비교에는 도움이 됩니다.
7-2. 재귀 한계: getrecursionlimit, setrecursionlimit
import sys print(sys.getrecursionlimit()) # 보통 1000 근처 sys.setrecursionlimit(2000) # 재귀 허용 깊이 늘리기 (주의)- 너무 크게 설정하면 스택 오버플로우 / 프로그램 크래시 위험이 있으니 주의해야 합니다.
- 재귀 알고리즘 대신 반복문/스택 구조로 바꾸는 것이 더 안전한 경우가 많습니다.
8. 기타 자주 쓰이는 속성/함수
8-1. sys.getdefaultencoding()
import sys print(sys.getdefaultencoding()) # 보통 'utf-8'- 파이썬 내부 기본 문자열 인코딩을 확인할 수 있습니다.
8-2. sys.modules
현재 로드된 모듈들을 담고 있는 딕셔너리입니다.
import sys print(list(sys.modules.keys())[:10])- 직접 수정하는 것은 권장되지 않지만,
- 동적 임포트 상황 디버깅 등에 참고용으로 사용할 수 있습니다.
8-3. sys.executable
import sys print(sys.executable)- 현재 사용 중인 파이썬 인터프리터의 실행 파일 경로를 반환합니다.
- 가상 환경/여러 버전이 섞여 있는 환경에서 디버깅할 때 유용합니다.
9. 실무 예시
9-1. 간단한 CLI 스크립트 템플릿
# cli_template.py import sys def main(argv): if len(argv) < 2: print("사용법: python cli_template.py <이름>") return 1 name = argv[1] print(f"안녕, {name}!") return 0 if __name__ == "__main__": code = main(sys.argv) sys.exit(code)main()함수에 로직을 작성하고,- 마지막에
sys.exit()에 반환 코드를 넘기는 패턴은 실무에서 자주 쓰입니다.
9-2. 플랫폼별 경로 처리 + 버전 체크
import sys from pathlib import Path if sys.version_info < (3, 8): print("Python 3.8 이상에서 실행해주세요.") sys.exit(1) if sys.platform == "win32": base = Path("C:/logs") else: base = Path("/var/log/myapp") base.mkdir(parents=True, exist_ok=True) print("로그 디렉터리:", base)10. 정리
sys는 파이썬 인터프리터와 실행 환경을 제어하는 관문 같은 모듈- 주요 기능 요약
sys.argv: 커맨드라인 인자sys.exit: 종료 코드 반환sys.path: 모듈 검색 경로sys.stdin/sys.stdout/sys.stderr: 표준 입출력 스트림sys.version,sys.platform: 버전/플랫폼 정보sys.getsizeof,sys.getrecursionlimit,sys.setrecursionlimit: 메모리/한계 관련
- 설치는 필요 없고, OS에 상관없이 동일한 방식으로 사용할 수 있습니다.
sys는 “사용자 코드와 인터프리터 사이의 접점” 같은 느낌이라,
한 번 익혀두면 CLI 도구, 스크립트 자동화, 환경 진단 등에 두루 활용할 수 있습니다.'업무 자동화 > Python' 카테고리의 다른 글
[Python] 파일·폴더 자동화: os + shutil + glob 핵심 정리 (0) 2025.12.03 [Python] random 함수 정리: 난수 생성, 샘플링, 셔플 핵심 사용법 (0) 2025.12.01 [Python] pathlib: OS 독립적인 파일·디렉터리 경로 다루기 (0) 2025.11.27 [Python] math 표준 라이브러리 정리: 기본 수학 함수, 상수, 활용 예시 (0) 2025.11.26 [Python] pandas 설치 방법과 기본 활용 예시 (Linux 환경 기준) (0) 2025.11.25