Python VM (or Interpreter)
와의 상호작용 담당.
sys
모듈은
- interpreter에 의해 사용되거나 유지되는 variables 와
- interpreter와 밀접(interpreter 종료 등)하게 관련된 functions 에
대한 access를 제공함.
주로 많이 이용되는 attributes는 다음과 같음.
sys.argv
Python script에 command line을 통해 전달된 argument list.
argv[0]
: script file 이름.argv[1]
부터는 script file 명 다음에 전달된 argument임. 공백문자로 구분됨.
python -c
를 통해 python code가 주어진 경우에는argv[0]
가-c
임.
참고로 Unix의 경우, OS로부터 넘겨지는 command line arguements는 bytes임.
Python이 이를 file system의 encoding으로 decode하여 sys.argv
가 되기 때문에 원래의 bytes로 얻기위해선 [os.fsencode(arg) for arg in sys.argv]
와 같이 다시 file system의 encoding으로 encode가 필요함.
https://dsaint31.tistory.com/477
sys.executable
현재 수행되는 python interpreter의 executable binary의 absolute path를 나타내는 문자열.
(쉽게 말하면, python 명령의 절대 경로 임.)
해당 경로가 검색가능하지 않으면 None
혹은 empty string을 가짐.
https://dsaint31.tistory.com/330
sys.exit([arg])
Python interpreter에게 종료를 지시한다.
(Python interactive shell에서는 exit()
를 이용)
주로 script에서 프로그램의 종료를 지시하기 위해 사용된다.
arg
는 일반적으로 문제 없이 종료했음을 나타내는0
임.- 다른 int 값인 경우엔 OS 에게 Python interpreter가 비정상종료임을 알려줌.
- Python interpreter종료 직후
echo $?
를 수행해서 확인 가능.
- Python interpreter종료 직후
- 단, 위와 같이 OS에게 알려주는 값은 시스템 레벨로 전달되는 것이라
try
및except
로 확인할 수 없음.
exit()
와 마찬가지로 SystemExit
exception을 발생시키는 건 같지만,
exit()
가 site-packages
에 기반하는 것과 달리
이는 sys
모듈에 있기 때문에 import sys
를 먼저 실행해야 한다.
주로 script나 python code에서 프로그램 종료를 위해 사용된다.
python -S
로 python interactive shell을 수행할 경우,site-packages
가 로드되지 않기 때문(-S 의 동작특성)에exit
를 호출시Not Defined NameError
가 뜬다.
하지만sys.exit
는 명시적으로import sys
를 하기때문에 해당 문제가 발생하지 않음.
넘겨지는 argument 에 대해선 다음을 참고하라.
sys.path
Python의 패키지 및 모듈의 경로들을 문자열로 가지고 있는 list.
- Python interpreter가 패키지나 모듈을 찾기 위한 참조 경로를 item으로 가짐.
아래의 sys.module과 함께 module search path를 관리하는 중요한 attributes임.
sys.module
Python interpreter가 현재 로딩한 모듈과 package를 저장하고 있는 dictionary.
1. import 문을 만나면 이 곳에 있는지를 확인하고
2. 없는 경우 builtins
와 sys.path
에서 대상 모듈을 찾아 로딩하고
3. 이를 sys.module
에 추가함.
모듈과 관련된 자세한 내용은 이 링크를 참고: https://dsaint31.tistory.com/528
import sys
def show():
for idx,i in enumerate(sys.argv):
print(f'argv[{idx:02d}]: {i}')
print('\n---------------------\n')
print(f'{sys.executable = }')
print('\n---------------------\n')
for idx, i in enumerate(sys.path):
print(f'path[{idx:02d}]: {i}')
print('\n---------------------\n')
for idx, (key, v) in enumerate(sys.modules.items()):
if idx >5:
break
print(f'{idx:03d}: {key} = {v}')
if __name__ == "__main__":
show()
sys.exit(0)
References
https://docs.python.org/3/library/sys.html
https://ds31x.tistory.com/page/Python-Python-%EC%A0%95%EB%A6%AC
'Python' 카테고리의 다른 글
[Python] 환경변수 접근하기 (2) | 2023.09.30 |
---|---|
[Colab] colab에서 ipynb 공유하기 (0) | 2023.09.26 |
[Pandas] Index 지정 관련 메서드 : reset_index, set_index (0) | 2023.09.20 |
[Python] IPython shell 에서 shell cmds 사용하기. (0) | 2023.09.19 |
[Python] else : break checker (0) | 2023.09.18 |