개발/Python

[Python] 파이썬 sys 모듈에 대해서 알아보자

growing-dev 2023. 2. 23. 22:46
반응형

파이썬 개발하면서 sys 모듈을 종종 사용할 때가 있다. 이 sys 모듈에 대해서 알아보도록 한다.

 

파이썬 sys 모듈에 대해서 알아보자

 

sys 모듈은 파이썬에서 제공하는 표준 라이브러리로 시스템과 관련된 각종 정보들을 제공하는 모듈이라고 볼 수 있다.

특히 python 프로젝트의 입력을 받을 때 argument를 관리한다거나 platform에 따라 다르게 처리해야 하는 것들, python version, 프로그램 종료 등의 시스템 관련된 정보나 제어를 할 수 있는 기능을 제공한다. 기능이 여러 가지가 있지만 대표적인 몇 가지들을 소개하고 어떻게 활용할 수 있을지 알아보도록 한다.

 

sys.argv

파이썬을 실행하면서 입력된 파라미터를 전달받아 활용할 수 있는 기능이다. argv를 출력하면 입력된 arguments를 list 형태로 저장하고 있다. 주의할 점은 항상 첫번째 argument는 실행하는 파일이다. 즉 내가 원하는 입력 argument는 그다음인 argv [1]부터 시작한다고 볼 수 있다.

import sys

if __name__ == '__main__':

    print(sys.argv)
    print(len(sys.argv))

no argv
3 argv and length is 4

 

sys.path

sys.path는 파이썬이 설치되어 있는 경로 및 라이브러리들의 경로를 모두 저장하고 있는 변수이다.

라이브러리나 모듈을 인식하지 못해서 설치된 경로를 확인할 때 활용할 수 있을 것 같다.

import sys

if __name__ == '__main__':

    print(sys.path)
['/home/growing-dev/PycharmProjects/pythonProject', '/home/growing-dev/PycharmProjects/pythonProject', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/growing-dev/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages']

 

sys.path.append("dir") 을 통해 원하는 디렉터리를 실행 path에 추가할 수 있다.

import sys

if __name__ == '__main__':

    sys.path.append("/my_dir/files")
    print(sys.path)
['/home/growing-dev/PycharmProjects/pythonProject', '/home/growing-dev/PycharmProjects/pythonProject', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/growing-dev/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages', '/my_dir/files']

 

 

sys.executable

현재 실행하고 있는 파이썬 executable 파일을 출력할 수 있다.

import sys

if __name__ == '__main__':

    print(sys.executable)

출력 결과

sys.platform

현재 실행하고 있는 os 환경 platform의 이름을 출력할 수 있다. 나는 WSL에서 실행했기 때문에 linux라고 표시되는 것을 확인할 수 있다. os 환경에 따라 달라져야 할 것들에 대해 관리할 수 있는 기능이다.

import sys

if __name__ == '__main__':

    print(sys.platform)

 

출력 결과

sys.version

파이썬 버전을 출력한다. 버전에 따라 호환성 문제 등을 확인할 때 활용할 수 있을 것이다.

import sys

if __name__ == '__main__':

    print(sys.version)

 

출력 결과

 

 

sys.getsizeof()

getsizeof()는 len()과 다르게 객체의 메모리 사이즈를 반환하는 함수이다. 즉 파이썬에서 실제로 해당하는 객체에 대해서 메모리에 얼마큼 할당했는지 확인할 수 있다. 객체는 함수나 변수 모두 해당될 수 있다.

 

import sys


def add(a, b):
    return a + b


if __name__ == '__main__':
    a = 1
    b = 3.14
    c = 'A'
    d = add
    print(sys.getsizeof(a))
    print(sys.getsizeof(b))
    print(sys.getsizeof(c))
    print(sys.getsizeof(d))

int형 객체는 28, float는 24, string은 50, 간단한 add 함수는 136byte 만큼 할당된 것을 확인할 수 있다.

출력 결과

 

sys.exit()

프로그램을 종료하는 함수이다. 에러가 발생하거나 특정 시점에 프로그램 자체를 종료하고 싶을 때 활용할 수 있다.

간단한 프로그램을 작성해보았다. 프로그램이 실행되면 입력에 stop이 있으면 종료하고 아니면 1을 1초 간격으로 출력하도록 구현했다. 

import sys
import time


def do_something():
    while (True):
        print("1")
        time.sleep(1)


if __name__ == '__main__':
    print("main start")
    if len(sys.argv) >= 2 and sys.argv[1] == 'stop':
        print("stop")
        sys.exit()

    print("do something")
    do_something()

그냥 main.py를 실행하면 아래와 같이 do something이 실행되고 1이 1초에 한번씩 출력되었다.

출력 결과

 

만약 main.py에 stop 인자를 같이 넣어준다면 아래와 같이 바로 stop 이후 sys.exit()을 통해 종료가 되었다.

출력 결과

 

결론

특별히 어렵거나 복잡하지 않은 모듈이다. 시스템 관련된 정보나 동작을 활용할 때 종종 쓰이는 것이므로 알아두고 사용하면 좋을 것 같다.

 

반응형