importsys# 표준 출력sys.stdout.write("Hello\n")# print()와 유사# 표준 에러sys.stderr.write("Error message\n")# 표준 입력line=sys.stdin.readline()# 출력 리다이렉션original_stdout=sys.stdoutwithopen('output.txt','w')asf:sys.stdout=fprint("This goes to file")sys.stdout=original_stdout
3. 버퍼링
1
2
3
4
5
6
7
importsys# 버퍼 즉시 플러시print("Progress...",end='',flush=True)# 또는sys.stdout.flush()
모듈 시스템
4. 모듈 검색 경로 (sys.path)
1
2
3
4
5
6
7
8
9
10
11
importsys# 모듈 검색 경로 목록print(sys.path)# ['', '/usr/lib/python3.x', ...]# 경로 추가 (임시)sys.path.insert(0,'/my/custom/modules')# 또는 appendsys.path.append('/another/path')
5. 로드된 모듈 (sys.modules)
1
2
3
4
5
6
7
8
9
10
importsysimportjson# 로드된 모듈 딕셔너리print('json'insys.modules)# True# 모듈 언로드 (재import 강제)if'mymodule'insys.modules:delsys.modules['mymodule']importmymodule# 다시 로드
인터프리터 정보
6. 버전 정보
1
2
3
4
5
6
7
8
9
10
11
12
13
importsys# 버전 문자열print(sys.version)# '3.11.0 (main, Oct 24 2022, 18:26:48) [GCC 11.2.0]'# 버전 튜플 (비교에 유용)print(sys.version_info)# sys.version_info(major=3, minor=11, micro=0, releaselevel='final', serial=0)# 버전 체크ifsys.version_info>=(3,10):print("Python 3.10 이상")
importsys# 현재 재귀 제한print(sys.getrecursionlimit())# 1000 (기본값)# 재귀 제한 변경sys.setrecursionlimit(2000)# 주의: 너무 높이면 스택 오버플로우
10. 객체 크기
1
2
3
4
5
6
7
8
9
10
11
importsys# 객체의 메모리 크기 (바이트)print(sys.getsizeof([]))# 56print(sys.getsizeof([1,2,3]))# 80print(sys.getsizeof("hello"))# 54print(sys.getsizeof(42))# 28# 딕셔너리d={'a':1,'b':2}print(sys.getsizeof(d))# 184
11. 참조 카운트
1
2
3
4
5
6
7
importsysa=[1,2,3]print(sys.getrefcount(a))# 2 (a + 함수 인자로 임시 참조)b=a# 참조 추가print(sys.getrefcount(a))# 3
프로그램 종료
12. sys.exit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
importsys# 정상 종료sys.exit(0)# 에러와 함께 종료sys.exit(1)# 에러 메시지와 함께sys.exit("Error: Something went wrong")# try-except로 잡기 가능try:sys.exit(1)exceptSystemExitase:print(f"Exit code: {e.code}")
importsys# 정수 최대값 (Python 3에서는 무제한이지만)print(sys.maxsize)# 9223372036854775807 (64비트)# 부동소수점 정보print(sys.float_info.max)# 최대 floatprint(sys.float_info.epsilon)# 정밀도# 해시 시드 (랜덤화)print(sys.hash_info.hash_bits)# 기본 인코딩print(sys.getdefaultencoding())# 'utf-8'print(sys.getfilesystemencoding())# 'utf-8'
importsys# 잘못: import 후 path 수정importmymodule# 이미 검색 완료sys.path.insert(0,'/new/path')# 올바름: import 전에 path 수정sys.path.insert(0,'/new/path')importmymodule